BLOGTIMES
2008/06/30

MySQLで2つ以上のカラムの組み合わせが重複するレコードを削除したい

  mysql 
このエントリーをはてなブックマークに追加

MySQLで複合プライマリキーを使っているような場合に、id1とid2の組み合わせが重複するレコードを削除したい時のサブクエリの書き方が分からなくてちょっとはまってしまったのでメモ。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.8.5 行サブクエリ

行コンストラクタは通常、2つ以上のカラムを返すサブクエリを持つ比較に対して利用します。例えば、次のクエリは要求に答え、「テーブル t2 にも存在する テーブル t1 内の全ての行を検出します。」

SELECT column1,column2,column3
FROM t1
WHERE (column1,column2,column3) IN
(SELECT column1,column2,column3 FROM t2);

これまではどうしても必要な時にはCONCAT(column1, column2)とかで無理やり1つのカラムにまとめてやってしまっていたので、indexが効かずにものすごく時間がかかって困っていましたが、意外と単純な方法で実行できるんですね。ちゃんとマニュアルに記載されていて、行コンストラクタという名前がついているとは思いませんでした。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2628
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン