提问人:Pop23 提问时间:10/11/2023 最后编辑:AlbinaPop23 更新时间:10/12/2023 访问量:68
根据表1条件比较表2,检查表2是否包含ID
Compare two tables to check if table two contains ids based on table 1 condition
问:
我有两张表,一张是原始表,另一张是精确的副本,直到我对其进行更改。T1
T2
T1
在开始时,两者看起来都如下所示:T1
T2
编号 | 事件 | Event_Date |
---|---|---|
001 | 考试 - 简体中文 | 2022-04-04 |
001 | 考试 - 生物学 | 2021-03-01 |
002 | 考试 - 数学 | 2022-05-23 |
002 | 考试 - 简体中文 | 2022-05-29 |
003 | 考试 - 化学 | 2022-04-13 |
004 | 考试 - 数学 | 2021-09-15 |
我使用以下 SQL 来更改 T2:
DELETE FROM T2
WHERE ID IN (SELECT ID FROM T2 WHERE EVENT_DATE < '2022-01-01')
我应该得到如下所示的东西:
编号 | 事件 | Event_Date |
---|---|---|
002 | 考试 - 数学 | 2022-05-23 |
002 | 考试 - 简体中文 | 2022-05-29 |
003 | 考试 - 化学 | 2022-04-13 |
我现在想做的只是一个质量检查,以确保我已经删除了所有曾经有过 .ID
event_date < 2022-01-01
我尝试了以下操作:
SELECT T1.ID
FROM T1
INNER JOIN T2 ON T1.ID=T2.ID
WHERE T1.EVENT_DATE < '2022-01-01'
但我认为这只是试图寻找无论如何都不应该出现的日期,所以我认为这不是解决问题的正确方法。< 2022-01-01
T2
答:
0赞
Jiji
10/11/2023
#1
这很简单。只需在您提到的查询中使用左联接而不是内部联接即可。它将为您提供所需的输出。此外,您需要添加 T2 表的 ID 列,以便与 T1 表的 ID 列对应的 NULL 值将帮助您了解从 T2 中删除了哪个 ID。
SELECT T1.ID as T1_ID, T2.ID as T2_ID
FROM T1
LEFT JOIN T2 ON T1.ID=T2.ID
WHERE T1.EVENT_DATE < '2022-01-01'
0赞
Akshit Gupta
10/12/2023
#2
您可以在查询中使用左联接来代替内部联接。
SELECT T1.ID
FROM T1
LEFT JOIN T2 ON T1.ID=T2.ID
WHERE T1.EVENT_DATE < '2022-01-01'
- 它将返回 T1.ID 和 T2.ID 值对,其中 T1.EVENT_DATE 之前,如果 T2 中没有匹配项,它仍然会返回 T1.ID T2.ID。
2022-01-01
NULL value
评论
ID
EVENT_DATE