根据表1条件比较表2,检查表2是否包含ID

Compare two tables to check if table two contains ids based on table 1 condition

提问人:Pop23 提问时间:10/11/2023 最后编辑:AlbinaPop23 更新时间:10/12/2023 访问量:68

问:

我有两张表,一张是原始表,另一张是精确的副本,直到我对其进行更改。T1T2T1

在开始时,两者看起来都如下所示:T1T2

编号 事件 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

我现在想做的只是一个质量检查,以确保我已经删除了所有曾经有过 .IDevent_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-01T2

SQL MySQL 联接

评论

0赞 B.Griffin 10/11/2023
是否可以在最后一个 select 语句中指定 和 列属于哪个表?就像现在一样,这应该给你一个模棱两可的列错误IDEVENT_DATE
0赞 Pop23 10/11/2023
对不起,刚刚编辑将其添加到@B.Griffin中
0赞 Alden W. 10/11/2023
在选择中,选择“t1.id”和“t2.id”,而不是使用内部联接,而是使用左联接。然后,您的选择结果应显示 id 存在于 t1 中,但 t2 列为 null,确认它们已被删除。

答:

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-01NULL value