【问题标题】:MYSQL Use 'is null' after 'on' and 'where' in 'left join' statementMYSQL 在'left join'语句中的'on'和'where'之后使用'is null'
【发布时间】:2013-03-01 17:45:39
【问题描述】:

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

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

【问题讨论】:

  • 为什么查询中需要s2.name?

标签: mysql sql null left-join


【解决方案1】:

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

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

【讨论】:

  • 感谢您的链接!很有用!
【解决方案2】:

没有。

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

【讨论】:

  • 谢谢,我很清楚,在加入表之前,s2中没有'null'值,加入完成后创建'null',所以可以用'where'过滤' 子句。
猜你喜欢
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多