下面的查询是正确的。它返回行 paul
和rick
因为它们具有最高的子行评级。通过以下链接为我解决了这个问题。我无法理解该查询。我理解连接,我不理解的是 t2.rating is null
?
http://sqlfiddle.com/#!2/97e60/2
select t1.* from mytable t1
left join mytable t2
on t1.parentid = t2.parentid and t1.rating < t2.rating
join mytable parents
on parents.id = t1.parentid
where t2.rating is null AND parents.name like '%mike%'
t1.rating < t2.rating
获取子行的最高评级值,我知道 t2.rating is null
意味着 t2. rating 是 false,但我不知道它在查询中做什么?我删除了它并添加了其他结果。那么它到底是做什么来消除不正确的结果的呢?
最佳答案
因为你有一个left join
(而不是 join
)您将从 t1
获得行即使 t2
中没有任何匹配的行。指定t2.rating is null
只是意味着您只能获得 t2
形式的行其中评级为空。
与 null
的任何比较是假的,即使双方都是 null
。 t2.rating is null
的组合在 where 子句和 t1.rating < t2.rating
中在 join 子句中意味着您将永远从 t2
获取任何行,因为这些条件永远不可能同时是 true
.
关于mysql - WHERE 子句为空?不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540644/