0

私はこのような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

4

2 に答える 2

0

エラーは、MySQL の通常の機能です。(つまり、同じステートメントでテーブルに影響を与え、それを選択することはできません)。

曲テーブルの ID (増分 int など) を使用して一時テーブルを作成し、次を使用して削除できます。

DELETE ... WHERE id IN (SELECT id FROM temp)

またはこれに似たもの。適正?

于 2013-07-30T17:16:40.513 に答える