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