MySQL从另一个表更新值

时间:2019-11-08 02:11:30

标签: mysql sql

这是我的表结构,如果有帮助的话:

enter image description here

 UPDATE songs
-> SET artist_id =
-> (SELECT artist_id FROM artists WHERE artists.name = songs.artist);
Query OK, 0 rows affected (0.00 sec)
Rows matched: 27  Changed: 0  Warnings: 0

我的代码保持匹配的行,但永远不会改变实际表中的任何内容

关于它为什么不起作用的任何想法吗?

3 个答案:

答案 0 :(得分:1)

此代码基本上看起来是正确的。我将其写为:

UPDATE songs s
    SET artist_id = (SELECT a.artist_id 
                     FROM artists a 
                     WHERE a.name = s.artist
                    );

如果该查询返回错误,则artist_id不在artists中。您可能需要a.id

如果该查询没有更新任何内容,则artist_id s已经具有相同的值。

答案 1 :(得分:1)

您可以在此处尝试使用更新联接:

UPDATE songs s
LEFT JOIN artists a
    ON a.name = s.artist
SET artist_id = a.artist_id;

答案 2 :(得分:1)

更新联接的经典用例。

UPDATE songs
JOIN artists ON song.artist = artist.name
SET songs.artist_id = artists.artist_id;

但是,这些语法中的任何一个都不会改变数据已经是最新的事实。

  

查询正常,受影响的0行(0.00秒)   匹配的行:27已更改:0警告:0

27 songs行被匹配。每个artist_id已设置为对应的artists.artist_id。因此,O行受到影响或更改。没有生成警告。仅仅因为查询匹配行并不意味着它改变了它们。