次のようなMySQLテーブルがあります:
(unique_id、uid_data1、uid_data2、sorting_data1、sorting_data2)
このテーブルは、これまで双方向のリレーションがサポートされていなかったツールで使用されるため、テーブルには
(1, 1212, 2034, 1, 1)
(2, 2034, 1212, 1, 1)
(3, 4567, 9876, 1, 0)
(4, 9876, 4567, 0, 1)
テーブルには「一方向」の関係も含まれます。つまり、
(5, 5566, 8899, 1, 9)
=> (?, 8899, 5566, 9, 1) の行は存在しません
ツールが双方向/対称関係をサポートするようになったので、mysql テーブルから重複データを削除したいと思いますが、これを行うための適切なクエリを見つけるのに苦労しています。
上記の例では、uid が 2 と 4 の行を削除したいと思います (データは既に行 1 と 3 に格納されているため)。
最初に、どのエントリが削除されるかを確認するために SELECT ステートメントをセットアップしようとしました。
私はJOINクエリを考えました
SELECT x.uid, x.uid_link1, x.uid_link2, y.uid_link1 as 'uid_link2', y.uid_link2 as 'uid_link1'
FROM tx_sdfilmbase_hilfstab x
INNER JOIN tx_sdfilmbase_hilfstab y ON x.uid_link1=y.uid_link2 AND x.uid_link2=y.uid_link1
WHERE ???
ORDER BY x.uid_link1, x.uid_link2
ただし、MySQL にレコードの「半分」のみを選択するように指示する必要があるところに行き詰まっています。
これを行う方法に関する提案はありますか?
PSテーブルには数千行が含まれているため、テーブル内の各レコードを手動で削除することはできません;-)