亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL NOT IN不工作

SQL NOT IN不工作

守著星空守著你 2019-07-30 16:09:38
SQL NOT IN不工作我有兩個數據庫,一個保存庫存,另一個包含主數據庫記錄的子集。以下SQL語句不起作用:SELECT  stock.IdStock        ,stock.Descr        FROM    [Inventory].[dbo].[Stock] stockWHERE   stock.IdStock NOT IN         (SELECT foreignStockId FROM          [Subset].[dbo].[Products])不是不起作用。刪除NOT會得到正確的結果,即兩個數據庫中的產品。但是,使用NOT IN并不會返回任何結果。我做錯了什么,有什么想法嗎?
查看完整描述

3 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

SELECT foreignStockIdFROM   [Subset].[dbo].[Products]

可能會返回一個NULL。

NOT IN如有查詢將不會返回任何行NULL中的列表中存在小號NOT IN值。您可以使用IS NOT NULL以下方式明確排除它們。

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

或者NOT EXISTS改為使用。

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

除了擁有您想要的語義之外,執行計劃NOT EXISTS通常更簡單,如此處所示。

行為差異的原因歸結為SQL中使用的 三值邏輯。謂詞可以計算為True,FalseUnknown。

一個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 UnknownUnknown根據真值表評估三值邏輯

以下鏈接對各種選項的性能進行了一些額外的討論。


查看完整回答
反對 回復 2019-07-30
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

如果NOT IN不起作用,您可能總是嘗試進行LEFT JOIN。然后使用連接表中的一個值(即NULL)WHERE過濾。提供的,您加入的值不包含任何NULL值。


查看完整回答
反對 回復 2019-07-30
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

您還可以使用Case子句來解決此類問題

SELECT  stock.IdStock        ,stock.Descr        
FROM    [Inventory].[dbo].[Stock] stockWHERE   (Case when stock.IdStock IN
        (SELECT foreignStockId FROM
        [Subset].[dbo].[Products]) then 1 else 0 end) = 0

此語法適用于SQL Server,Oracle和postgres


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 1392 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號