SQL SERVER NULL值和连接注意问题
联接表的列中的 null 值(如果有)互相不匹配。如果其中一个联接表的列中出现空值,只能通过外部联接返回这些空值(除非 WHERE 子句不包括空值)。
下面的两个表中,每个表中要参与联接的列中均包含 NULL 值:
将列 a 中的值与列 c 中的值进行比较的联接在包含 NULL 值的列上不会获得匹配项:
SELECT
*
FROM [dbo].[Table_1] AS a
INNER JOIN [dbo].[Table_2] AS b
ON ([a].[a] = [b].[ c ])
*
FROM [dbo].[Table_1] AS a
INNER JOIN [dbo].[Table_2] AS b
ON ([a].[a] = [b].[ c ])
另外,从基表返回的空值与从外部联接返回的空值很难区分开。例如,下面的 SELECT 语句对这两个表执行左向外部联接:
SELECT
*
FROM [dbo].[Table_1] AS a
LEFT JOIN [dbo].[Table_2] AS b
ON ([a].[a] = [b].[c])
*
FROM [dbo].[Table_1] AS a
LEFT JOIN [dbo].[Table_2] AS b
ON ([a].[a] = [b].[c])
总结:NULL表示未知,所以在和任何其他值进行匹配时候都是返还的未知,所以在连接查询的时候 ON 条件后返回的是两个表的该记录是否匹配,结果需要true or false,当遇到NULL值,返回的是未知,所以不会返回数据。这是在连接查询时候切记。
作者:DataStrategy
出处:https://www.cnblogs.com/xiongnanbin/
联系:1183744742@qq.com;xiongnanbin@126.com
本文版权归作者和博客园共有(转载的归原作者所有),欢迎转载,但是请在文章页面明显位置给出原文连接。如有问题或建议,请多多留言、赐教,非常感谢。