我有一个关于带有空值的键的连接的问题。
假设我有一个表格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左键行都不显示在我的结果中。
谢谢!
发布于 2018-08-01 02:30:42
left join非常简单。当on子句的计算结果为"true“时,它将保留第一个(左)表中的所有行以及第二个(右)表中的所有行。
当on子句的计算结果为"false“或NULL时,left join仍然保留第一个表中具有第二个表的NULL值的所有行。
如果sub_id或id为NULL,则on子句的计算结果为NULL,因此它使用NULL占位符保留第一个表中的所有行,第二个表中的列使用NULL占位符。
发布于 2018-08-01 02:31:12
根据定义,左连接将包括连接左侧的所有id,无论id在另一个表中是否有有效的映射,如果没有,它将与NULL相关。
如果你只想使用有效的链接,你需要使用INNER JOIN。
发布于 2018-08-01 02:40:34
我认为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 https://stackoverflow.com/questions/51619861
复制相似问题