我在SQL
中有一个关于重复数据删除的复杂问题我可以使用一些建议:
我有一张机场代码表。但是,在某些情况下会有重复项,其中一行列出本地机场ID,而另一行列出ICAO (international) ID
,其中包括前导K
。
我需要识别重复项,例如:
KI80
和I80
KX49
和X49
请注意,有许多以K
开头的有效行。
步骤1:我需要确定上述案例的重复项。
第2步:我需要使用SQL自动删除所有具有前导K
的重复项。
步骤3:我需要在不同的表table b
中识别哪些行使用了我刚刚删除的标识符,因此我可以将它们更新为幸存的ID(例如:如果他们使用KI80
,我需要在这个新表中将它们更改为I80
")
非常感谢任何帮助!
答案 0 :(得分:1)
您可以在删除语句中使用自联接。我们的想法是将表格与自己联系起来,但是在" K"字首。如果存在匹配,那么" K"记录是重复的:
delete t
from table t join
table tnotk
on t.airportID = concat('K', tnotk.airportID) and tnotk.airportID not like 'K%'
where t.airportID like 'K%';
注意:这假设没有非ICAO机场ID以" K"
开头。