Jer*_*emy 3 sql sql-server null
想象一下一个表(名为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
Run Code Online (Sandbox Code Playgroud)
当我们的匹配键行在ForeignID中具有正常值时,这非常有用.但是,如果出现了ForeignID,它将失败(不返回任何内容)NULL.做一些初步搜索后,我现在明白为什么(后读这样的问题这一个),但我还没有找到如何解决此限制的任何好的解决方案.
授予SQL Server的ANSI_NULLS设置我可以更改,但这似乎是一个肮脏的,可能有问题的黑客.
或者,我总是可以组成我自己的伪空值(如0)并将其粘贴在ForeignID列中而不是NULL,但这会破坏我为此列建立的外键约束.
那么如何最好地实现我想要的呢?
未经测试,但我认为你可以这样做:
SELECT E1.*
FROM Example E1
JOIN Example E2
ON E2.KeyID = 123
AND (E2.ForeignID = E1.ForeignID
OR (E2.ForeignID IS NULL AND E1.ForeignID IS NULL))
Run Code Online (Sandbox Code Playgroud)
编辑:Works,SQL小提琴在这里
SELECT E1.*
FROM Example E1
JOIN Example E2
ON E2.KeyID = 123
AND EXISTS (SELECT E2.ForeignID
INTERSECT
SELECT E1.ForeignID)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |