hql:使用left join 时,左表没匹配上的数据没有查询出来?去掉where后b表的条件后,反而查询出来。为什么呢?
没有查询出来
查询出来了
1、当 a LEFT JOIN b ON ……时,如果b表的列出现在WHERE条件中,LEFT JOIN 就跟 JOIN 的效果一样了,除非是 b.col is NULL 条件,这个是基础知识
2、抛开业务需求,单从SQL技术的角度,你的SQL的正确写法应该是将 WHERE 中的 AND b.dt='9999-99-99' 移动到 a LEFT JOIN b ON 这一行的最后才行
1.on是先对表进行筛选再生成关联表,where是先生成关联表再对关联表进行筛选,on执行的优先级高于left join,而where的优先级低于left join
2.where是先筛选条件,如果你删除where中b表的条件那么B表就是全部查询,如果你保留B表的条件那么意思就是a表和b表关联以后,求得到得数据是 A时间为‘9999-99-99’且b表时间为‘9999-99-99’
3.如果你把b表的条件加到 on 后面那么就是先在b表中找到时间为 ‘9999-99-99’我觉得你应该是要这种数据。