使用SELECT语句删除查询

时间:2013-07-30 16:56:49

标签: mysql

我一直在使用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

2 个答案:

答案 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)

或类似的东西。合理?