私はこのような2つのテーブルを使用しています
tbl_songs
id | track_id | dummy_name
tbl_tracks
id | song_id
重複した dummy_name がありますが、重複レコードのセットからの最初のレコードの値は、このように tbl_tracks に更新されます。
tbl_songs s
id | track_id | dummy_name
1 | 12 | A
2 | | A
3 | | A
4 | 2 | B
4 | | B
tbl_tracks t
id | song_id
2 | 4
12 | 1
内部結合関係により、重複レコードを見つけるために tbl_songs の track_id 列を更新しました..
注意: 同じ dummy_name (つまり、重複したレコード) を持ち、tbl_tracks に関連していない、または関連していないと言えるレコードを削除したいと考えてtrack_id = ''
います。
レコードを選択するために試したSQL
SELECT a.id as aid, a.dummy_name as adn, b.id as bid, b.dummy_name as bdn
FROM tbl_songs a
LEFT JOIN tbl_songs b ON a.dummy_name = b.dummy_name
WHERE a.track_id != '' AND a.dummy_name != '' AND a.id <> b.id
これらのレコードを削除するには
DELETE FROM tbl_songs where EXISTS (
SELECT *
FROM tbl_songs a
LEFT JOIN tbl_songs b ON a.dummy_name = b.dummy_name
WHERE a.track_id != '' AND a.dummy_name != '' AND a.id <> b.id)
エラー:You can't specify target table 'tbl_songs' for update in FROM clause