[英]How to use WHERE statement in SQL to exclude a group
我有一個復雜的查詢,但這是我要執行的操作的本質
在這樣的表格中:
Col1 Col2 Bill 0 Bill 0 Bill 0 Bill 1 Bill 1 John 1 John 1 Jonh 1
上表有2列。 我正在嘗試查詢第2列的所有行中都具有'1'的行。由於'Bill'行具有'0'和'1',因此必須排除bill。 WHERE語句中的子查詢給出了多個結果,並且不起作用。
SELECT t1.Col1
FROM Table1 t1
WHERE t1.Col1 <> (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')
在查詢中使用某種形式的循環語句會給我的項目帶來全新的頭痛,因此我希望任何聰明的人都可以幫助我完成我的任務。
有很多方法。 每個人都有其優點,這取決於您的RDBMS以及您最容易閱讀的內容。 有關性能的更多詳細信息,請參見此處 ,並檢查執行計划或進行一些測試,以獲得最適合您需求的解決方案。
SELECT *
FROM Table t1
WHERE t1.Col1 NOT IN (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')
要么
SELECT t1.*
FROM Table t1
LEFT JOIN
( SELECT Col1
FROM Table
WHERE Col2 <> '0'
) Exc
ON exc.Col1 = t1.Col1
WHERE Exc.Col1 IS NULL
要么
SELECT *
FROM Table t1
WHERE NOT EXISTS
( SELECT 1
FROM Table t2
WHERE t2.Col2 <> '0'
AND t1.Col1 = t2.Col1
)
SELECT t1.Col1
FROM Table1 t1
WHERE NOT EXISTS
(SELECT t2.Col1
FROM Table1 t2
WHERE t2.col2 = 0
AND t2.col1 = t1.col1)
SELECT Col1
FROM YourTable
WHERE Col2 = 1
EXCEPT
SELECT Col1
FROM YourTable
WHERE Col2 <> 1;
嘗試:
SELECT Col1
FROM Table1
GROUP BY Col1
HAVING COUNT(DISTINCT Col2)=1 and MAX(Col2)='1'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.