gpt4 book ai didi

SQL NOT IN 不工作

转载 作者:行者123 更新时间:2023-12-01 17:21:40 25 4
gpt4 key购买 nike

我有两个数据库,一个保存库存,另一个包含主数据库记录的子集。

以下 SQL 语句不起作用:

SELECT  stock.IdStock
,stock.Descr
FROM [Inventory].[dbo].[Stock] stock
WHERE stock.IdStock NOT IN
(SELECT foreignStockId FROM
[Subset].[dbo].[Products])

not in 不起作用。删除 NOT 会给出正确的结果,即两个数据库中都有的产品。但是,使用 NOT IN 根本不会返回任何结果。

我做错了什么,有什么想法吗?

最佳答案

SELECT foreignStockId
FROM [Subset].[dbo].[Products]

可能返回 NULL

一个NOT IN查询不会返回任何行(如果有)NULL s 存在于 NOT IN 的列表中值(value)观。您可以使用 IS NOT NULL 明确排除它们如下。

SELECT stock.IdStock,
stock.Descr
FROM [Inventory].[dbo].[Stock] stock
WHERE stock.IdStock NOT IN (SELECT foreignStockId
FROM [Subset].[dbo].[Products]
WHERE foreignStockId IS NOT NULL)

或者使用 NOT EXISTS 重写相反。

SELECT stock.idstock,
stock.descr
FROM [Inventory].[dbo].[Stock] stock
WHERE NOT EXISTS (SELECT *
FROM [Subset].[dbo].[Products] p
WHERE p.foreignstockid = stock.idstock)

以及具有您想要 NOT EXISTS 的执行计划的语义通常更简单as looked at here .

行为差异的原因在于 three valued logic在 SQL 中使用。谓词可以计算为 True , False ,或Unknown

一个WHERE子句的计算结果必须为 True为了返回该行,但这对于 NOT IN 是不可能的当NULL如下所述。

'A' NOT IN ('X','Y',NULL)相当于 'A' <> 'X' AND 'A' <> 'Y' AND 'A' <> NULL)

  • 'A' <> 'X' = True
  • 'A' <> 'Y' = True
  • 'A' <> NULL = Unknown

True AND True AND Unknown计算结果为 Unknown根据truth tables for three valued logic .

以下链接提供了有关各种选项性能的一些附加讨论。

关于SQL NOT IN 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5231712/

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