[英]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)
僅計算非空表達式值
看來您的邏輯倒退了:
嘗試在兩個位置添加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.