簡體   English   中英

加入只搶不匹配的記錄 SQL

[英]Join to grab only non-matching records SQL

我有一些數據正在嘗試清理,以便對其進行進一步分析。 表中的一列稱為 record_type,它可以是 NEW 或 DEL。 這意味着最初可能會添加一條 NEW 記錄,但稍后會出現 DEL 記錄,表明該特定記錄現在已過期(NEW 和 DEL 記錄將在 record_id 上匹配)。 然而,NEW 和 DEL 記錄都會保留在數據中,不會被刪除。

所以我計划做的是創建兩個 CTE,一個僅用於 DEL 記錄,一個僅用於 NEW 記錄:

WITH deleted_rec AS(
SELECT *
FROM main_table
WHERE record_type = 'DEL'
)

, new_rec AS(
SELECT *
FROM main_table
WHERE record_type = 'NEW'
)

然后在兩個 CTE 的 record_id 列上進行外部聯接。

SELECT *
FROM new_rec
FULL OUTER JOIN deleted_rec ON deleted_rec.record_id = new_rec.record_id

目標本來是 output 只包括沒有 DEL 記錄的記錄進入該 record_id 這樣我就可以保證我在最終表中擁有的所有類型的新記錄都沒有 DEL 記錄隨時進來找他們,因此他們都會很活躍。 但是,我忘記了 FULL OUTER JOIN 會返回所有內容,而不僅僅是不匹配的內容,所以有沒有辦法解決這個問題以獲得我想要的 output?

我只會使用具有現有邏輯的單個查詢:

SELECT *
FROM main_table t1
WHERE record_type = 'NEW' AND
      NOT EXISTS (SELECT 1 FROM main_table t2
                  WHERE t2.id = t1.id AND t2.record_type = 'DEL');

用簡單的英語來說,上面的查詢是說要找到所有NEW的記錄,這些記錄也沒有與另一個具有DEL的相同id相關聯。

暫無
暫無

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

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