sql-server - 识别两个表之间的重复项并删除创建时间较早的表
问题描述
我有两张桌子 T1 和 T2。并非两个表上的所有列都相同,但两个表都有 Name 和 Date 列。
我想检查 T1 和 T2 中名称的重复项,但从表中删除日期较旧的条目。
例如:T1:
Name Date
A1 2012-09-09
A2 2018-08-08
A3 2015-04-06
T2:
Name Date
A1 2019-07-07
A2 2016-05-05
A4 2015-09-06
我想从表 1 中删除 A1,从表 2 中删除 A2。
解决方案
我们可以尝试使用两个存在删除查询:
DELETE
FROM T1 t1
WHERE EXISTS (SELECT 1 FROM T2 t2 WHERE t1.Name = t2.Name AND t2.Date > t1.Date);
和
DELETE
FROM T2 t2
WHERE EXISTS (SELECT 1 FROM T1 t1 WHERE t1.Name = t2.Name AND t1.Date > t2.Date);