我有一个关于SQL服务器的初学者问题。我通过将表A的列设置为等于表B中的列来将两个表相互链接。基本上,我的查询看起来像这样:
SELECT A.nr, [...]
FROM A, B
WHERE A.id = B.id
AND [...]
我的问题是,表B中的id列也有一些空值。因此,如果B.id为空,则不会显示整行,因为条件未满足。但是如果B.id为null,我只想要A.nr也是null而不是整个行只是没有出现。我怎样才能做到这一点?
我想到了以下内容:
SELECT A.nr, [...]
FROM A, B
WHERE A.id = B.id OR B.id IS NULL
AND [...]
然后该列只与所有可能的B.id行混合,没有?
答案 0 :(得分:2)
编写此逻辑的正确方法是使用显式JOIN
。 从不在FROM
子句中使用逗号。 始终使用正确,明确,标准的JOIN
语法。
在SQL Server中,您需要将其表达为:
SELECT A.nr, [...]
FROM A JOIN
B
ON (A.id = B.id OR (a.id IS NULL AND b.id IS NULL) )
WHERE . . .;
ANSI标准SQL为此目的有一个比较运算符,但SQL Server不支持它。这称为NULL
- 安全比较:
SELECT A.nr, [...]
FROM A JOIN
B
ON A.id IS NOT DISTINCT FROM B.id
WHERE . . .;