想象一个表(名为 Example),它有一个主键字段 (KeyID) 和一个外键字段 (ForeignID)。此外键用于将我们表中的行链接到单独表中的外部行/项目,建立多对一关系。然而,对于我们的许多行,不存在这种关系,所以我们的外键字段NULL
在这些行中。
现在,如果给定一个 KeyID(例如 123),获取包含所有具有匹配 ForeignID 值的行的结果集的首选 SQL 是什么?
我天真地从以下 SQL 开始:
SELECT E1.*
FROM Example E1
JOIN Example E2
ON E2.KeyID = 123
AND E2.ForeignID = E1.ForeignID
当我们匹配的键行在 ForeignID 中具有正常值时,这非常有用。但是,如果 ForeignID 恰好是 ,它将失败(不返回任何内容)NULL
。在做了一些初步搜索之后,我现在明白了原因(在阅读了这样的问题之后),但我还没有找到任何好的解决方案来解决这个限制。
授予 SQL Server 具有ANSI_NULLS
我可以更改的设置,但这似乎是一个肮脏的、可能有问题的 hack。
或者,我总是可以制作自己的伪空值(如 0)并将其粘贴在 ForeignID 列而不是NULL
,但这会破坏我为此列建立的外键约束。
那么如何最好地实现我想要的呢?