簡體   English   中英

SQL - select 基於值存在於另一列

[英]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.

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