我有一些資料正在嘗試清理,以便對其進行進一步分析。表中的一列稱為record_type,它可以是NEW 或DEL。這意味著最初可能會添加一條新記錄,但稍后會出現一條 DEL 記錄,說明該特定記錄現已過期(新記錄和 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
目標是輸出只包含該record_id沒有DEL記錄的記錄,這樣我就可以保證我在最終表中的所有型別NEW記錄都沒有DEL記錄隨時為他們而來,因此他們都會很活躍。但是,我忘記了 FULL OUTER JOIN 回傳所有內容,而不僅僅是不匹配的內容,所以有沒有辦法解決這個問題以獲得我想要的輸出?
uj5u.com熱心網友回復:
我只會使用帶有存在邏輯的單個查詢:
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與id具有DEL.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449616.html
