这是我的表结构,如果有帮助的话:
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
我的代码保持匹配的行,但永远不会改变实际表中的任何内容
关于它为什么不起作用的任何想法吗?
答案 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行受到影响或更改。没有生成警告。仅仅因为查询匹配行并不意味着它改变了它们。