だらだらやるよ。

こげつのIT技術メモ

重複レコードの一覧を取得

久しぶりにやって忘れてたので自分用にメモ
重複を取り除いて表示するとかはちょっとぐぐったら出てくるんですけどね。
またはキー項目として使いたい項目が重複している場合とか。


ただ僕が欲しかったのはキー項目は違うのだけど、他のいくつかの項目が重複している場合。
まあテーブルはこんな感じであったとしますね。
users

id name kana address memo
1 太郎 タロウ 大阪市
2 花子 ハナコ 大阪市 ×
3 二郎 ジロウ 東京都
4 二郎 ジロウ 東京都
5 二郎 ジロウ 大阪市 ×
6 三郎 サブロウ 東京都
7 太郎 タロウ 大阪市 ×

この中から、名前、カナ、住所が同じデータが他に登録されているものを検索します。
メモ欄は違う可能性があるので表示したいです。
SQLはこんな感じ、相関クエリですね

SELECT * FROM users AS m WHERE EXISTS(
       SELECT * FROM users AS s
       WHERE m.name = s.name
       AND m.kana = s.kana
       AND m.address = s.address
       AND m.id <> s.id
)

この図だと、1,3,4,7のデータが取得できるはずです。


使いどころはいくつか有ると思いますが、
微妙に違う情報が登録されていて、実際のデータを見ながらどちらかを削除したいときとかですかね。


あ、相関クエリなのでデータ量によってはそれなりに重いかもしれません。
注意して下さい!