MySQL Markup Records with Duplicates on Selectと接続します。違いは、実際に複製されたレコードだけでなく、同じ値を持つすべてレコードのマークアップだけです。最初のレコードはです。MySQLマークアップ同一の値を持つ選択のすべてのレコード(最初のものを含む)
id name
--------------
1 John # mark this
2 Peter
3 John # this
4 David
5 John # and this
@ M-カリド・junaid https://stackoverflow.com/a/47728321/1056384
SELECT DISTINCT a.*,
CASE WHEN b.id IS NULL THEN 0 ELSE 1 end `duplicate`
FROM tab a
LEFT JOIN tab b ON a.name = b.name AND a.id > b.id
ORDER BY a.id
によって提案されたアプローチそれは私のために1つのまたは2つの問題があります。それは、 "複製" レコードの最初の発生をマークアップしませ
- をグループで。
- それは、
order by
ID(それが依存している場合かわからない)を使用していますが、私はさまざまな方法で現実の複雑なクエリの結果ソートする必要があります。
クエリの最適化に意味がある場合、私の仕事は少し複雑です。実は、私はグループ内の重複をマークアップする必要があります。
id group name
--------------
1 1 John # mark this (dups in group #1)
2 1 Peter
3 1 John # mark this (dups in group #1)
4 2 David
5 2 John # this is not (it's in group #2)
1.あなたはちょうど '>' '><'に変更する必要があります。 2. ORDER BY句で必要なものを使用することができます。しかし、それを指定することなく、誰もあなたを助けることはできません。 –
うわー。それは本当にうまくいく。しかし、その背後にある論理を説明できますか? b-tableの<>レコードはどのように同じIDに結合していますか? – vatavale
その参加は**同じではありません** id。 '<>'は* not equal *です。 '!='を使用することもできます。 –