我想在用户表中过滤每个性别的最高人,这是可以正常工作的代码:
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'子句之后使用?
答案 0 :(得分:3)
第一个版本是排除user
表中没有匹配行的记录 - 当您加入时,这些记录将具有null
值。
第二个版本是过滤记录,其中name
列中的值为null
。
答案 1 :(得分:2)
没有
查看您的第二个查询,s2.name
还不是NULL
,因为您仍在加入行。因此,列的结果值在加入后可以评估为null
或null not
,并且可以在where
子句上进行过滤。