我正在尝试一个简单的LEFT JOIN查询,我希望LEFT表中的记录在RIGHT表中没有匹配项 .
SELECT
LeftTable.ID,
RightTable.ID as NullID
FROM
LeftTable
LEFT OUTER JOIN RightTable ON RightTable.ID = LeftTable.ID
那么,如何选择结果只包含NullID为NULL的记录的行?我认为LEFT OUTER JOIN是必需的,但是所有的Left记录都返回了匹配和不匹配的正确记录,我只希望左记录具有不匹配的正确记录 . 数据库引擎是InnoDB .
例如,查询返回以下内容:
LeftTable.ID, NullID
1, 1
2, Null
我只想要结果2,即NullID = Null
我尝试了以下LEFT JOIN并且是我一直在尝试的那种查询但是我在“where子句”中得到错误“[Err] 1054 - 未知列'NullID'” .
SELECT
LeftTable.ID,
RightTable.ID as NullID
FROM
LeftTable
LEFT JOIN RightTable ON RightTable.ID = LeftTable.ID
where NullID = Null;
希望这能解释我的问题 . 谢谢 .
2 回答
你可以试试这个:
如Working with NULL Values所述:
| 1 IS NULL | 1 IS NOT NULL |
| 0 | 1 |
您不能使用算术比较运算符(如=,<或<>)来测试NULL . 要自己演示,请尝试以下查询:mysql> SELECT 1 = NULL,1 <> NULL,1 <NULL,1> NULL;
| 1 = NULL | 1 <> NULL | 1 <空| 1> NULL |
| NULL | NULL | NULL | NULL |
因为与NULL进行任何算术比较的结果也是NULL,所以无法从这种比较中获得任何有意义的结果 .
另外,如Problems with Column Aliases所述:
因此,在您的情况下: