Mysql 如何根据SQL中另一个表的值向表中插入值?

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

所以在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 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之类的音乐网站上进行了讨论。

请提供示例数据和预期结果。很可能,你有几张同名的相册。非常好