加入只抓取不匹配的记录 SQL

Join to grab only non-matching records SQL

我有一些数据正在尝试清理,以便 运行 进一步分析。 table 中的一列称为 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

目标是让输出只包含没有 DEL 记录的记录 record_id 这样我就可以保证我的所有类型的 NEW 记录final table 不会在任何时候为他们提供 DEL 记录,因此他们都将处于活动状态。但是,我忘记了 FULL OUTER JOIN return 一切,而不仅仅是不匹配的东西,所以有没有办法解决这个问题以获得我想要的输出?

我只使用具有现有逻辑的单个查询:

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.[=14 相关联=]