【发布时间】:2015-05-28 23:15:55
【问题描述】:
我正在使用 Oracle 11g XE,但以下 HQL 未按预期工作。由于某种原因,它仍然两次返回相同的值。
@Query("SELECT y FROM Oferta y, ClassificacaoOfertaBanco c
LEFT JOIN c.oferta
LEFT JOIN c.banco WHERE y.id IN
(SELECT DISTINCT (o.id) FROM Oferta o
JOIN o.empresas e WHERE o.id NOT IN
(SELECT black.id FROM Banco b
JOIN b.blackList black WHERE b.id = ?1) AND o.dataRemocao IS NULL)
ORDER BY CASE c.classificacao WHEN NULL THEN y.classificacao ELSE
c.classificacao END DESC, y.divulgacaoDe DESC")
我在子查询中使用 distinct,因为我的 Oferta 对象有一些 Lob 字段,而 Oracle 不允许对它们进行 distinct。
有人可以帮帮我吗?
编辑: 经过几次测试,我确定发生这种情况的原因是我从 2 个表中进行选择。不过还是不知道怎么解决。
【问题讨论】:
-
DISTINCT出现在IN运算符之后的子查询中。没用,因为a IN (1, 2)和a IN (1, 1, 2)一样。 -
其实这让我很困惑。我在 IN 子句中还有其他几个带有 DISTINCT 的查询,它按预期工作。此查询与其他查询之间的唯一区别是我从 2 个表中选择的这个。
-
你的意思是
SELECT DISTINC y FROM Oferta y, ...? -
我编辑了之前的评论,但是由于对象内部的 Lob 字段,
SELECT DISTINCT y FROM Oferta y不会工作。 -
DISTINCTROW 不是有效的 HQL 值
标签: java spring oracle hibernate