使用DISTINCT子句查询仍然返回两次相同的值

时间:2015-05-28 23:15:56

标签: java spring oracle hibernate

我使用的是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不允许对它们进行区分。

有人能帮助我吗?

编辑: 经过几次测试后,我确定发生这种情况的原因是我从2个表中选择的事实。我仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

也许你想要的是:

@Query("SELECT c.oferta FROM ClassificacaoOfertaBanco c
        LEFT JOIN c.oferta 
        LEFT JOIN c.banco WHERE c.oferta.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 c.oferta.classificacao ELSE 
          c.classificacao END DESC, c.oferta.divulgacaoDe DESC")

我还没有对此进行测试,而且我没有您的数据模型,但我们的想法是从单个基表或实体中进行选择并遵循关系。