在MySQL选择查询输出中标记重复项

时间:2012-10-15 18:46:04

标签: mysql duplicates

到目前为止,我的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

现在我希望重复名称的FLAG显示为最低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查询来实现它。感谢您的时间和帮助。

1 个答案:

答案 0 :(得分: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

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