我正在将数据库从Oracle迁移到Postgres。我们的spring引导应用程序中有许多硬编码的查询,这些查询现在由于迁移而中断,我不得不修复它们。其中之一是:
String sql = "SELECT DISTINCT * FROM TABLE_A A " + "INNER JOIN TABLE_B B ON A.BIC = B.BIC " + "WHERE B.CUST_NUMBER=?" + "AND A.LOCATION=?" + "AND B.STATUS=?" + "AND B.LIVE=TRUE" + "ORDER BY A.TYPE, A.PARTY";
此查询对oracle运行良好,但不针对postgres运行。在针对postgres运行时,我得到以下错误: SELECT DISTINCT, ORDER BY expressions must appear in select list
SELECT DISTINCT, ORDER BY expressions must appear in select list
在阅读了一些关于相同错误的类似问题,甚至看到类似的问题之后,我对如何解决上述查询的问题一点也不清楚。删除 DISTINCT 子句将修复错误,但显然它不是相同的查询,因此这是不成功的。
DISTINCT
如果有人能提供一些建议,我们将不胜感激。
发布于 2022-05-13 18:22:40
您的查询可以在Postgres 13及更高版本中使用。如果您启动了一个新项目,那么您应该使用最新版本,而不是以稍微过时的版本开始。
在旧版本中,可以将其封装在派生表中以避免这种情况。
select * from ( SELECT DISTINCT * FROM TABLE_A A JOIN TABLE_B B ON A.BIC = B.BIC