繁体   English   中英

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

[英]How to insert values into table based off values of another table in SQL?

所以在 SQL 中,我有一个表专辑,其中有(album_id,album_name,year)我也有一个表歌曲,有(song_id,song_name,album_name)。

我使用了一个 alter table 语句向名为 album_id 的歌曲添加一列

对于属于专辑的每首歌曲,我想将其各自的专辑 ID 添加到该行

我不知道该怎么做。 我已经搞定了

UPDATE songs
SET songs.album_id = (select albums.album_id FROM albums WHERE songs.album_name = albums.album_name);

但是,该子查询返回多行并给我一个错误。 我还尝试在子查询中添加distinct并在子查询中group by

歌曲表中有多首歌曲属于同一张专辑。 每个专辑在专辑表中只出现一次。

如果它始终是相同的 album_id,则将其限制为一个

UPDATE songs
SET songs.album_id = (select albums.album_id 
                      FROM albums 
                      WHERE songs.album_name = albums.album_name 
                      LIMIT 1);

只有在您想向描述字段添加更多信息时,分组才有意义

你有问题。 专辑名称重复。 您可以在数据中找到它们:

select a.album_name, count(*)
from albums a
group by a.album_name
having count(*) > 1;

现在,您可能会在数据中意外重复——同一张专辑出现了不止一次。 如果是这样,请通过删除重复项来修复albums

或者,您可能拥有同名的不同专辑(可能是不同的艺术家)。 在这种情况下,您需要确定哪个属于给定用户。

您可以开始分配单例:

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 one和 this one

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM