代码之家  ›  专栏  ›  技术社区  ›  Eleanor

左键值为空的SQL左联接

  •  0
  • Eleanor  · 技术社区  · 6 年前

    我有一个关于用空值键联接的问题。

    假设我有一张桌子 t 在左边。( id 是主键,并且 sub_id 是与右表联接的键。)

        id sub_id value
        1  3       23
        2  3       234
        3  2       245
        4  1       12
        5  null    948
        6  2       45
        7  null    12
    

    我还有一张桌子 m 在右边。( t.sub_id = m.id )

        id feature
        1  9       
        2  8       
        3  2       
        4  1       
        5  4    
        6  2       
        7  null
    

    现在我想用

        select * from t left join m on t.sub_id = m.id   
    

    它会返回什么结果?是 Null 左键中的值影响结果?我想要一切 null 在我的结果中不显示左键行。

    谢谢您!

    3 回复  |  直到 5 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    left join 很简单。当 on 子句的计算结果为“true”。

    子句的计算结果为“false”或 NULL , the 左连接 仍将所有行保留在第一个表中, 无效的 第二个表的值。

    如果两者 sub_id id 无效的 然后你的 子句的计算结果为 无效的 ,因此它将第一个表中的所有行 无效的 第二列的占位符。

        2
  •  0
  •   NiVeR    6 年前

    根据定义,左联接将包括来自联接左侧部分的所有ID,无论该ID在另一个表中是否有有效映射,如果没有,它将与 NULL .

    如果只想使用有效的链接,则需要使用 INNER JOIN .

        3
  •  0
  •   Zmnako Awrahman beloncfy    6 年前

    我想 inner join 不是解决方案,因为 right 他不想把它放在联合桌上。你还是可以的 left join 然后添加语句以删除所有 keys = null

    你可以试试这个

    SELECT * 
    FROM t 
    LEFT JOIN m ON t.sub_id = m.id
    WHERE t.sub_id != NULL
    

    SELECT * 
    FROM t 
    LEFT JOIN m ON t.sub_id = m.id  
    WHERE t.sub_id IS NOT NULL