Mysql 如何根据SQL中另一个表的值向表中插入值?
所以在SQL中,我有一个表albums,它有(album\u id、album\u name、year) 我还有一个表,其中包含歌曲(song_id、song_名称、album_名称) 我使用ALTERTABLE语句为歌曲添加了一个名为album_id的列 对于属于专辑的每首歌曲,我想将其各自的专辑id添加到该行 我不知道该怎么做。我做完了Mysql 如何根据SQL中另一个表的值向表中插入值?,mysql,sql,database,sql-update,Mysql,Sql,Database,Sql Update,所以在SQL中,我有一个表albums,它有(album\u id、album\u name、year) 我还有一个表,其中包含歌曲(song_id、song_名称、album_名称) 我使用ALTERTABLE语句为歌曲添加了一个名为album_id的列 对于属于专辑的每首歌曲,我想将其各自的专辑id添加到该行 我不知道该怎么做。我做完了 UPDATE songs SET songs.album_id = (select albums.album_id FROM albums WHERE so
UPDATE songs
SET songs.album_id = (select albums.album_id FROM albums WHERE songs.album_name = albums.album_name);
但是,该子查询返回多行,并给我一个错误。我还尝试在子查询中添加distinct
,并在子查询中添加groupby
albums.albu\u id
歌曲表中有多首歌曲属于同一唱片集。
每个相册在相册表中只显示一次。如果相册id始终相同,则将其转换为一个相册
UPDATE songs
SET songs.album_id = (select albums.album_id
FROM albums
WHERE songs.album_name = albums.album_name
LIMIT 1);
只有当您想在描述字段中添加更多信息时,GroupBy才有意义。相册有重复的名字。您可以在以下数据中找到它们:
select a.album_name, count(*)
from albums a
group by a.album_name
having count(*) > 1;
现在,数据中可能会出现意外的重复--同一个相册多次出现。如果是,请通过删除重复项来修复相册
或者,你可能拥有真正不同的同名专辑(可能还有不同的艺术家)。在这种情况下,您需要找出哪个属于给定用户
您可以开始分配单例:
UPDATE songs s JOIN
(SELECT album_name, COUNT(*) as cnt, MIN(album_id) as album_id
FROM albums a
GROUP BY album_name
HAVING COUNT(*) = 1 -- safe, there is only one
) a
ON s.album_name = a.album_name
SET s.album_id = a.album_id;
显然,这已经在诸如this和this之类的音乐网站上进行了讨论。请提供示例数据和预期结果。很可能,你有几张同名的相册。非常好