到目前为止,我的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查询来实现它。感谢您的时间和帮助。
答案 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
这是一种方法。希望它可以帮到你。