1

到目前为止,我的 sql 查询在表上有一些连接,最终输出如下所示:

FLAG        id      name
----        ---     ----
OK          21      ken
OK          34      mon
OK          51      jil
OK          51      jil
OK          71      jil
OK          80      ron
OK          91      ron

现在我希望重复名称的标志显示为最低 id 的“dup”:

FLAG        id      name
----        ---     ----
OK          21      ken
OK          34      mon
OK          51      jil
dup_51      51      jil
dup_51      71      jil
OK          80      ron
dup_80      91      ron

我可以通过对存储在文件中的记录使用 shell/perl 脚本来做到这一点,但需要知道是否可以通过操作我的 SQL 查询来实现。感谢您的时间和帮助。

4

1 回答 1

2

我建议使用一个子查询来跟踪重复条目name并返回每个重复项的最小值id。我假设您的表名为tbl

select name, min(id) as dupId
from tbl
group by name
having count(name) > 1

现在您可以将其与原始表连接起来:

select 
    tbl.*, if(not isnull(dupId), 'Ok', concat('dup_', dupId)) as flag2
from 
    tbl
    left join (
        select name, min(id) as dupId
        from tbl
        group by name
        having count(name) > 1) as a on tbl.name = a.name

这是一种方法。希望它可以帮助你。

于 2012-10-15T18:54:12.050 回答