mysql - WHERE 子句为空?不明白

标签 mysql

下面的查询是正确的。它返回行 paulrick因为它们具有最高的子行评级。通过以下链接为我解决了这个问题。我无法理解该查询。我理解连接,我不理解的是 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 的任何比较是假的,即使双方都是 nullt2.rating is null的组合在 where 子句和 t1.rating < t2.rating 中在 join 子句中意味着您将永远t2 获取任何行,因为这些条件永远不可能同时是 true .

关于mysql - WHERE 子句为空?不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540644/

相关文章:

mysql - Rails mysql 删除重复的元组

php - 分页 MYSQL 计数与 PHP 计数和 array_slice

PHP 登录脚本结果资源

mysql - 错误使用内连接函数/分组函数?

mysql - MySQL 中的 Alter Table 仅使用一个核心

php - 如何使用Mysql语句分离日夜记录

具有负值的mysql直方图

mysql - 将时间从 '00:00:00.0000' 转换为 MM :SS mysql

mysql - MySQL UNION 中的语句评估顺序和变量赋值

mysql - 使用 TSQL 对字符串中的整数进行排序