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