我有一个关于使用空值键连接的问题。
假设我有一张桌子test1()
,它将在左侧。 (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
左键行都不会显示在结果中。
谢谢!
答案 0 :(得分:2)
left join
非常简单。当on
子句的值为“ true”时,它将所有行保留在第一(左)表中,并将所有行保留在第二(右)表中。
当on
子句的值为“ false”或NULL
时,left join
仍将第一张表中的所有行保留为第二张表的NULL
值。< / p>
如果sub_id
或id
为NULL
,则您的on
子句的值为NULL
,因此它将所有行保留在带有{第二列中的{1}}占位符。
答案 1 :(得分:0)
按定义,左联接将包括联接左边的所有ID,无论该ID在另一个表中是否具有有效的映射,如果没有,则将与NULL
相关。 / p>
如果只想使用有效链接,则需要使用INNER JOIN
。
答案 2 :(得分: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
答案 3 :(得分:0)
您将保留左表中的所有结果。 请记住,如果左表中有一个空值,则不会计算此 (null) [null = null is not a valid expression]
Left table
id value
1 1
2 null
Right table
id value
1 1
2 1
3 null
4 null
使用(值)作为连接键在左右表之间进行左连接的结果
Result table
id value id_1 value_1
1 1 1 1
1 1 2 1
2 null null null