0

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

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”子句之后使用?

4

2 回答 2

3

第一个版本排除了表中没有匹配行的记录user——这些记录在您加入时会有一个null值。

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

于 2013-03-01T17:48:30.617 回答
2

不。

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

于 2013-03-01T17:49:04.877 回答