目标表不允许自己从查询本身派生

时间:2015-01-05 11:02:30

标签: mysql

我收到了以下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更新filename201501.mp3的列值一个共同的album字段。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

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;

您不需要嵌套查询,因为连接涉及要更新的表。您只需使用内部联接,并使用引用仅更新所需的表。