NULL在连接中不匹配

时间:2016-06-29 03:46:30

标签: sql sql-server join

我有2个表A和B

表格A

subgroup    |   maingroup   |   
------------------------------------------  
NULL        |   A       |   
NULL        |   A       |   
Top     |   B       |   
Top     |   B       |   

表B

subgroup
---------------     
top             
NULL    

我正在运行此查询。

select * from a
join b
on a.subgroup=b.subgroup
group by a.subgroup,a.maingroup,b.subgroup

我收到了这个输出

subgroup    |   maingroup   |   subgroup    
------------------------------------------------------- 
Top     |   B       |   Top 

我担心的是为什么NULL不匹配并给我输出像 NULL A Null。

我正在使用MSSQL

3 个答案:

答案 0 :(得分:6)

如果您希望两个表中的NULL值在连接期间匹配,则一个选项是在ON子句中添加显式条件:

SELECT *
FROM a INNER JOIN b
    ON a.subgroup = b.subgroup OR (a.subgroup IS NULL AND b.subgroup IS NULL)
GROUP BY a.subgroup, a.maingroup, b.subgroup

对显式连接条件a.subgroup IS NULL AND b.subgroup IS NULL的需求是,比较两个NULL值的相等本身会返回NULL,这是另一种说明结果未知的方式。

答案 1 :(得分:1)

如果您希望两个表中的NULL值在连接期间匹配,则可以使用IsNull函数。

SELECT *
FROM a INNER JOIN b
    ON IsNull(a.subgroup,'') = IsNull(b.subgroup,'')
GROUP BY a.subgroup, a.maingroup, b.subgroup

答案 2 :(得分:0)

使用ISNULL函数进行简单尝试

SELECT *   FROM a INNER JOIN b

ON ISNULL(a.subgroup,'') = ISNULL(b.subgroup,'')

GROUP BY a.subgroup, a.maingroup, b.subgroup