第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

SQL NOT IN不工作

SQL NOT IN不工作

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

3 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

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

可能會(huì)返回一個(gè)NULL。

NOT IN如有查詢將不會(huì)返回任何行NULL中的列表中存在小號(hào)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)

除了擁有您想要的語(yǔ)義之外,執(zhí)行計(jì)劃NOT EXISTS通常更簡(jiǎn)單,如此處所示。

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

一個(gè)WHERE子句必須求值True以便返回行,但是NOT IN如果NULL存在則不可能,如下所述。

'A' NOT IN ('X','Y',NULL) 相當(dāng)于 'A' <> 'X' AND 'A' <> 'Y' AND 'A' <> NULL)

  • 'A'<>'X'= True

  • 'A'<>'Y'= True

  • 'A'<> NULL = Unknown

True AND True AND UnknownUnknown根據(jù)真值表評(píng)估三值邏輯。

以下鏈接對(duì)各種選項(xiàng)的性能進(jìn)行了一些額外的討論。


查看完整回答
反對(duì) 回復(fù) 2019-07-30
?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

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


查看完整回答
反對(duì) 回復(fù) 2019-07-30
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

您還可以使用Case子句來(lái)解決此類問(wèn)題

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

此語(yǔ)法適用于SQL Server,Oracle和postgres


查看完整回答
反對(duì) 回復(fù) 2019-07-30
  • 3 回答
  • 0 關(guān)注
  • 1386 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)