我有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
答案 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