无法弄清楚为什么这两个语句返回不同数量的结果。它们应该是相同的。 SQL 版本(正确)返回 2 个结果,HQL 版本(错误)返回 3 个结果。
SQL 的输出返回 tb2.user 的 3 个结果,值为 1、null 和 null。 where 子句意味着过滤到 2 个结果,删除 tb2.user 值为 1 的结果。但是,HQL 版本返回 3 个结果。我希望 HQL 返回 2 个结果。
我的SQL
SELECT * FROM table1 as tb1 LEFT JOIN table2 as tb2 ON tb1.user = tb2.blocked WHERE tb2.user <> 1 OR tb2.user is null;
我的 HQL
SELECT r FROM table1 tb1 LEFT JOIN table2 tb2 ON tb1.user.id = tb2.user.id WHERE tb2.user.id <> :userId OR tb2.user.id is null GROUP BY tb1
非常感谢对此的任何帮助!
最佳答案
您不应该在where条件下使用左连接表的列..这可以作为内部连接
您应该将这些条件移至相关的 ON 子句中
在第二个查询(My HQL)中,您的分组依据不正确,没有聚合功能(因此查询不等效) (当您需要不同的结果时..使用 Distinct 子句)
SELECT r
FROM table1 tb1
LEFT JOIN table2 tb2 ON tb1.user.id = tb2.user.id
AND ( tb2.user.id <> :userId OR tb2.user.id is null )
关于java - Hibernate HQL LEFT JOIN 的执行与等效 SQL 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452809/