使用SQL修剪并查找不起作用的重复项

使用SQL修剪并查找不起作用的重复项,sql,phpmyadmin,trim,Sql,Phpmyadmin,Trim,我必须搜索并删除机场代码表中的重复项。这些复制品不是完全的复制品。一条记录可能是“标准”记录,另一条记录可能有一个前导“K” 代表同一机场的机场记录示例(出于我们的目的,副本): 我想我可以通过从所有记录中剥离前导的“K”并使用以下SQL将其与未剥离的记录进行比较来实现这一点: SELECT identity FROM tbl_airports WHERE identity IN (SELECT TRIM(LEADING 'K' FROM identity) FROM tbl_airports)

我必须搜索并删除机场代码表中的重复项。这些复制品不是完全的复制品。一条记录可能是“标准”记录,另一条记录可能有一个前导“K”

代表同一机场的机场记录示例(出于我们的目的,副本):

我想我可以通过从所有记录中剥离前导的“K”并使用以下SQL将其与未剥离的记录进行比较来实现这一点:

SELECT identity
FROM tbl_airports
WHERE identity IN (SELECT TRIM(LEADING 'K' FROM identity) FROM tbl_airports)
我的目标是返回不带前导“K”的版本,这样我就可以将SQL转换为delete语句来删除重复记录


但是,上面的SQL似乎不起作用。有什么想法吗?

如果要删除带有前导
k
的记录,可以执行以下操作:

delete a
    from tbl_airports a
    where a.identity like 'K%' and
          exists (select 1 from tbl_airports a2 where 'K' + a2.identity = a.identity);
这使用SQL Server语法,但在大多数数据库中也可以使用类似的语法

标签中有“phpadmin”,这可能是MySQL。在该数据库中,您可以使用
连接来执行此操作:

delete a join
       (select 'K' + a2.identity as identity
        from tbl_airports
        where a2.identity not like 'K%'
       ) ak
       on a.identity = ak.identity
    where a.identity like 'K%';
编辑:

查询的
select
版本为:

select a.*
from a join
     (select 'K' + a2.identity as identity
      from tbl_airports
      where a2.identity not like 'K%'
     ) ak
     on a.identity = ak.identity
 where a.identity like 'K%';

您使用的是什么数据库?不幸的是,这些数据库似乎不起作用。我首先尝试将它们作为select语句,但它们返回的结果与K#########和###MySQL不匹配。您希望删除哪个版本?这些查询将删除以
K
开头的版本。这样就可以了。您是否可以先创建一个查询来测试它是否会返回所有以K开头的项,并且有一个没有K的“重复项”?我需要在删除之前检查它是否有效。谢谢
select a.*
from a join
     (select 'K' + a2.identity as identity
      from tbl_airports
      where a2.identity not like 'K%'
     ) ak
     on a.identity = ak.identity
 where a.identity like 'K%';