MYSQL在'left join'语句中'on'和'where'之后使用'is null'

时间:2013-03-01 17:45:40

标签: mysql sql null left-join

我想在用户表中过滤每个性别的最高人,这是可以正常工作的代码:

SELECT s1.name, s1.sex, s1.height 
FROM user s1 
LEFT JOIN user s2 ON s1.sex =s2.sex AND s1.height < s2.height 
WHERE s2.name IS NULL;

但是这个不起作用:

SELECT s1.name, s1.sex, s1.height 
FROM user s1 
LEFT JOIN user s2 ON s1.sex =s2.sex AND s1.height < s2.height AND s2.name IS NULL;

这是否意味着'is null'只能在'where'子句之后使用?

2 个答案:

答案 0 :(得分:3)

第一个版本是排除user表中没有匹配行的记录 - 当您加入时,这些记录将具有null值。

第二个版本是过滤记录,其中name列中的值为null

答案 1 :(得分:2)

没有

查看您的第二个查询,s2.name还不是NULL,因为您仍在加入行。因此,列的结果值在加入后可以评估为nullnull not,并且可以在where子句上进行过滤。