SELECT DISTINCT,ORDER BY 表达式必须出现在 select 列表中 - 从 Oracle 迁移到 Postgres 时出错

SELECT DISTINCT, ORDER BY expressions must appear in select list - error when migrating from Oracle to Postgres

我正在将我们的数据库从 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

经过一些阅读甚至看到关于相同错误的类似问题,我 none 更清楚了我如何针对上述查询解决此问题。删除 DISTINCT 子句将修复错误,但显然它不是同一个查询,所以这是不行的。

如果有人能提供一些建议,将不胜感激。

您的查询适用于 Postgres 13 及更高版本。如果你开始一个新项目,那么你应该使用最新的版本,而不是从一个稍微过时的版本开始

在旧版本中,您可以将其包装在派生的 table 中以解决这个问题。

select *
from (
  SELECT DISTINCT * 
  FROM TABLE_A A 
    JOIN TABLE_B B ON A.BIC = B.BIC 
  WHERE B.CUST_NUMBER=?
    AND A.LOCATION=?
    AND B.STATUS=?
    AND B.LIVE=TRUE
) a
ORDER BY A.TYPE, A.PARTY

Postgres 12 example

Postgres 14 example