首页 文章

MySQL LEFT OUTER JOIN不过滤记录

提问于
浏览
4

我正在尝试一个简单的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 回答

  • 1

    你可以试试这个:

    SELECT
    LeftTable.ID,
    RightTable.ID as NullID
    FROM
    LeftTable
    LEFT JOIN RightTable ON RightTable.ID = LeftTable.ID
    where RightTable.NullID IS NULL;
    
  • 4

    Working with NULL Values所述:

    要测试NULL,请使用IS NULL和IS NOT NULL运算符,如下所示:mysql> SELECT 1 IS NULL,1 IS NOT NULL;


    | 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所述:

    标准SQL不允许在WHERE子句中引用列别名 . 强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值 .

    因此,在您的情况下:

    SELECT LeftTable.ID, RightTable.ID as NullID
    FROM   LeftTable LEFT JOIN RightTable ON RightTable.ID = LeftTable.ID
    WHERE  RightTable.ID IS NULL
    

相关问题