Sql左键左键与空值

新手上路,请多包涵

我有一个关于使用空值键加入的问题。

假设我有一张桌子 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 左键行不显示在我的结果中。

谢谢!

原文由 Eleanor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 510
2 个回答

left join 非常简单。当 on 子句评估为“真”时,它会保留第一个(左)表中的所有行以及第二个(右)表中的所有行。

When the on clause evaluates to “false” or NULL , the left join still keeps all rows in the first table with NULL values for第二张桌子。

If either sub_id or id is NULL , then your on clause evaluates to NULL , so it keeps all第一个表中的行与 NULL 第二个中的列的占位符。

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为 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

原文由 Zmnako Awrahman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进