Mysql 如何在子字符串定义的SQL中识别和删除重复项
我在Mysql 如何在子字符串定义的SQL中识别和删除重复项,mysql,sql,Mysql,Sql,我在SQL中遇到了一个关于重复数据消除的复杂问题,我可以在以下方面提供一些建议: 我有一张有机场代码的桌子。但是,在某些情况下,一行列出了本地机场ID,而另一行列出了ICAO(国际)ID,其中包括一个前导的K 我需要识别重复项,例如: KI80和I80 KX49和X49 请注意,有许多有效行以K开头 步骤1:我需要识别上述案例的重复项 步骤2:我需要使用SQL自动删除所有具有前导K的重复项 步骤3:我需要在另一个表表b中标识哪些行使用了我刚刚删除的标识符,这样我就可以将它们更新为幸存的ID(例如
SQL
中遇到了一个关于重复数据消除的复杂问题,我可以在以下方面提供一些建议:
我有一张有机场代码的桌子。但是,在某些情况下,一行列出了本地机场ID,而另一行列出了ICAO(国际)ID
,其中包括一个前导的K
我需要识别重复项,例如:
KI80
和I80
KX49
和X49
请注意,有许多有效行以K
开头
步骤1:我需要识别上述案例的重复项
步骤2:我需要使用SQL自动删除所有具有前导K
的重复项
步骤3:我需要在另一个表表b
中标识哪些行使用了我刚刚删除的标识符,这样我就可以将它们更新为幸存的ID(例如:如果它们使用KI80
,我需要在这个新表中将它们更改为I80
)
非常感谢您的帮助!您可以在delete语句中使用自联接。其思想是将表联接到自身,但在“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%';
注意:这假设没有以“K”开头的非ICAO机场ID。如果在“表b”位置为机场代码定义了外键,则需要在运行步骤2之前运行步骤3。如果在其他位置仍将机场代码定义用作外键时尝试删除机场代码定义,则步骤2将失败。