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(即重复的记录)并且具有track_id = ''或我可以说与 tbl_tracks 无关的记录。

我尝试过的用于选择记录的 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

1

如果我理解得很好,您需要从tbl_songs所有记录中删除,例如track_id = ''当且仅当有其他记录具有相同dummy_name但具有track_id != ''

DELETE FROM tbl_song 
    WHERE track_id = '' 
    AND dummy_name IN (SELECT dummy_name FROM tbl_song WHERE track_id != '')
于 2013-07-30T17:08:05.783 回答
0

该错误是 MySQL 的正常功能。(即,您不能在同一语句中影响表并对其进行选择)。

您可以使用歌曲表中的 ID(递增的 int 或其他)创建一个临时表,然后使用以下命令删除:

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

或类似的东西。合理的?

于 2013-07-30T17:16:40.513 回答