我一直在使用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的记录(即重复的recods),并且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
答案 0 :(得分:1)
如果我理解得很清楚,您需要从tbl_songs
删除所有记录,例如track_id = ''
if和仅当有其他记录具有相同{ {1}}但dummy_name
track_id != ''
答案 1 :(得分:0)
错误是MySQL的正常功能。 (即你不能影响一个表并在同一个语句中选择它。)
您可以使用歌曲表中的ID(递增的int或其他)创建临时表,然后使用以下命令删除:
DELETE ... WHERE id IN (SELECT id FROM temp)
或类似的东西。合理?