使用DISTINCT关键字会导致此错误:不是SELECTed表达式

Ken*_*Ken 53 sql oracle hibernate oracle11g

我有一个看起来像这样的查询:

SELECT DISTINCT share.rooms
FROM Shares share
  left join share.rooms.buildingAdditions.buildings.buildingInfoses as bi
... //where clause omitted
ORDER BY share.rooms.floors.floorOrder, share.rooms.roomNumber,
         share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent
Run Code Online (Sandbox Code Playgroud)

这导致以下异常:

Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression
Run Code Online (Sandbox Code Playgroud)

如果我删除DISTINCT关键字,查询运行没有问题.如果我删除order by子句,则查询运行没有问题.不幸的是,我似乎无法获得没有重复的有序结果集.

Lam*_*mak 89

您正尝试使用未计算的列来排序结果.如果您没有DISTINCT那个,这不会是一个问题,但由于您的查询基本上只按share.rooms列分组,它如何使用其他列可以为同share.rooms一个列分配多个值的结果集 ?

  • 有趣的是,在编译时未检测到此错误,而仅在运行时才检测到。 (2认同)
  • @david-balažic:这是因为未编译查询。它在运行时发送到 Oracle 服务器,然后才被解析和执行。 (2认同)
  • @D.Mika 我指的是在执行前编译的 PL/SQL 代码中的用法。 (2认同)

Mat*_*ski 8

这篇文章有点旧,但我为解决此错误所做的一件事是包装查询,然后像这样在外部应用 order by。

SELECT COL
FROM (
   SELECT DISTINCT COL, ORDER_BY_COL
   FROM TABLE
   // ADD JOINS, WHERE CLAUSES, ETC.
) 
ORDER BY ORDER_BY_COL;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)