gpt4 book ai didi

java - Hibernate HQL LEFT JOIN 的执行与等效 SQL 不同

转载 作者:行者123 更新时间:2023-12-02 01:46:12 25 4
gpt4 key购买 nike

无法弄清楚为什么这两个语句返回不同数量的结果。它们应该是相同的。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com