SQL左键左键具有空值

时间:2018-07-31 18:27:55

标签: sql null left-join

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

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

谢谢!

4 个答案:

答案 0 :(得分:2)

left join非常简单。当on子句的值为“ true”时,它将所有行保留在第一(左)表中,并将所有行保留在第二(右)表中。

on子句的值为“ false”或NULL时,left join仍将第一张表中的所有行保留为第二张表的NULL值。< / p>

如果sub_ididNULL,则您的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