gpt4 book ai didi

sql - 当您希望 NULL = NULL 为真时,在 SQL 中该怎么做?

转载 作者:行者123 更新时间:2023-12-04 14:15:20 25 4
gpt4 key购买 nike

想象一个表(名为 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,它会失败(不返回任何内容)。 .在进行了一些初步搜索之后,我现在明白了原因(在阅读了 this one 之类的问题后),但我还没有找到任何很好的解决方案来解决这个限制。

授予 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))

编辑:作品,SQL fiddle here

关于sql - 当您希望 NULL = NULL 为真时,在 SQL 中该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com