我收到以下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;


您不需要嵌套查询,因为联接涉及要更新的表。您可以简单地使用内部联接,并通过使用引用仅更新所需的表。

10-06 00:13