[英]SQL - select based on value existence in another column
我想創建一個 SQL 查詢來識別沒有 A3 事件的井。 我正在使用 SQL 服務器。
我嘗試了多種方法,例如檢查計數,與事件 A3 進行比較,但仍然無法得到我想要的。
從下面的示例中,所需的結果將是 W3 和 W4
地點 | 事件 |
---|---|
W1 | A1 |
W1 | A2 |
W1 | A3 |
W2 | A1 |
W2 | A2 |
W2 | A3 |
W3 | A1 |
W3 | A4 |
W4 | A2 |
W4 | A4 |
NOT EXISTS是一種非常高效的方法
例子
Select *
From YourTable A
Where not exists ( select 1
from YourTable T
where T.Well=A.Well and T.[Event]='A3'
)
結果
Well Event
W3 A1
W3 A4
W4 A2
W4 A4
聚合是一種方法:
SELECT Site
FROM yourTable
GROUP BY Site
HAVING COUNT(CASE WHEN Event = 'A3' THEN 1 END) = 0;
如果您確實還需要查看所有站點的匹配井,則將上述內容放入 CTE 並將其用作子查詢:
WITH cte AS (
SELECT Site
FROM yourTable
GROUP BY Site
HAVING COUNT(CASE WHEN Event = 'A3' THEN 1 END) = 0
)
SELECT Site, Event
FROM yourTable
WHERE Site IN (SELECT Site FROM cte);
你可以做
SELECT DISTINCT site
FROM table_name
WHERE site NOT IN (SELECT DISTINCT site
FROM table_name
WHERE event = 'A3')
sub-query
將返回帶有 A3 事件的站點。 因此使用LEFT JOIN
加入表並過濾子查詢中不可用的站點
SELECT DISTINCT Site
FROM your_table as tbl
LEFT JOIN
(
SELECT DISTINCT Site
FROM your_table
WHERE Event = 'A3'
) as sq
ON tbl.site=sq.site
WHERE sq.Site IS NULL
SELECT Well
FROM test
where Well not in (select Well from tablename where Evt = 'A3');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.