簡體   English   中英

如果所有值都為null,則SQL select列具有相同的鍵

[英]SQL select column with same key if all values are null

我有兩列ColumnA和ColumnB,有時columnB不會被填充,所以應該e。 我正在尋找僅在所有ColumnA未填充的情況下才會選擇的查詢。

ColumnA|ColumnB
Apples|
Apples|
Apples|Orange

這就是我的意思,但這是不正確的,因為它說ColumnA為null且具有相同的值,並且已填充ColumnB。 如果所有columnB都未填充,我只希望查詢返回行。

SELECT ColumnA
 FROM tblMyTable
WHERE ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NULL)

您當前的查詢給您太多的結果。 您要消除的具有ColumnB值的那些:

SELECT ColumnA
 FROM tblMyTable
WHERE ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NULL)
AND NOT ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NOT NULL)

或者,更聰明的是:

select ColumnA,COUNT(ColumnB) from tblMyTable
group by ColumnA having COUNT(ColumnB) = 0

因為COUNT(Expression)僅計算非空表達式值

看來您的邏輯倒退了:

  • 您的查詢在A列值,其中 B列NULL值
  • 我認為您想要B列中沒有 非NULL值的A列中的值。

嘗試在兩個位置添加NOT並添加DISTINCT以避免重復的結果:

SELECT DISTINCT ColumnA
FROM tblMyTable
WHERE ColumnA NOT IN
      (SELECT ColumnA 
       FROM tblMyTableB
       WHERE ColumnB IS NOT NULL)

另外,如果ColumnA可以為NULL,則必須從內部查詢中排除這些NULL值,否則NOT IN表達式將返回NULL而不是True ,因此將不返回任何結果:

SELECT DISTINCT ColumnA
FROM tblMyTable
WHERE ColumnA NOT IN
      (SELECT ColumnA 
       FROM tblMyTableB
       WHERE ColumnA IS NOT NULL
       AND ColumnB IS NOT NULL)

使用EXCEPT。 這可以表示為

獲取A列,但該列A的B列中的一些非空值除外

DECLARE @MyTable TABLE (ColumnA varchar(20) NOT NULL, ColumnB varchar(20) NULL);

INSERT @MyTable VALUES
  ('Apple', NULL),('Apple', NULL),('Apple', 'Orange'),
  ('Banana', NULL),('Banana', NULL), 
  ('Strawberry', 'Pie'), ('Strawberry', 'Pie')

SELECT ColumnA FROM @MyTable
EXCEPT
SELECT ColumnA FROM @MyTable WHERE ColumnB IS NOT NULL

有關EXCEPT的更多信息: 為什么T-SQL中存在EXCEPT?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM