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

ここで、重複する名前の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クエリを操作することでそれが可能かどうかを知る必要があります。お時間を割いてご協力いただきありがとうございます。

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 に答える