Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在子字符串定义的SQL中识别和删除重复项_Mysql_Sql - Fatal编程技术网

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将失败。