我收到以下MySQL的错误。Error Code: 1093. You can't specify target table 'songlist' for update in FROM clause
我认为我需要使用内部联接,但似乎无法使其与嵌套在select语句中的WHERE子句一起使用。有任何想法吗?
SET SQL_SAFE_UPDATES=0;
UPDATE samdb.songlist
SET
songlist.xfade = (SELECT
t.xfade
FROM
tmpsonglist AS t,
songlist AS s
WHERE
t.album = s.album)
WHERE
filename LIKE '%201501.mp3';
SET SQL_SAFE_UPDATES=1;
期望的结果是,只要
xfade
字段以songlist
结尾(基于公共的tmpsonglist
字段),就用filename
更新201501.mp3
中的album
列值。 最佳答案
请尝试以下操作:
SET SQL_SAFE_UPDATES=0;
UPDATE samdb.songlist AS s
INNER JOIN samdb.tmpsonglist AS t
ON t.album = s.album
SET
s.xfade = t.xfade
WHERE
s.filename LIKE '%201501.mp3';
SET SQL_SAFE_UPDATES=1;
您不需要嵌套查询,因为联接涉及要更新的表。您可以简单地使用内部联接,并通过使用引用仅更新所需的表。