【问题标题】:Insert two tables value to already exist tables将两个表值插入到已经存在的表中
【发布时间】:2014-03-29 12:13:55
【问题描述】:

我有两张表album_new 和song_new。 song_new 表有列album_id,通过这个关系我可以知道哪个专辑有多少首歌。其中 album_id 和 song_id 是自动递增的。

album_new

 album_id | album_name
    ---------+-----------
    1        | abs
    2        | def

song_new

 song_id | album_id | song_name
    1       | 1        | yahoo
    2       | 1        | lalala
    3       | 2        |kukukuku

当我像这样将一个表的值插入另一个表时

INSERT INTO album(album_name) SELECT album_name FROM album_name

album_id 已更改,我无法将 song_new 表插入歌曲表。因为现在关系不准确。我如何将这两个表值插入到已经有一些值的另外两个表专辑和歌曲中。我可以通过使用 foreach 循环的服务器端代码来做到这一点,但我可以在 sql 中做到这一点吗?任何机构都可以为我提供语法吗?

编辑:这是我要插入上述表格值的两个表格

专辑

 album_id | album_name
    ---------+-----------
    1        | aaa
    2        | bbb

歌曲

 song_id | album_id | song_name
    1       | 1        | old_song1
    2       | 2        | old_song2
    3       | 2        | old_song3

【问题讨论】:

  • 如果歌曲表的 id 相对于该专辑的其他歌曲出现故障,这不是问题。你可以通过id识别专辑,你有什么问题?
  • 我想将专辑插入另一个表,所以如果其他表已经有 5 张专辑,专辑 'abs' 的 id 将为 6,'def' 将为 7。当我将歌曲表插入另一个表时桌子。雅虎歌曲显示在错误的专辑下
  • 好的,你可以在id上添加一个偏移量,等于其他表的最大值,我会尽快去电脑写。

标签: sql


【解决方案1】:

如果您已经转移了专辑,则必须使用专辑名称作为枢轴..

Insert into song_new(album_id, song_name) (select a.album_id, c.song_name from song c join album b on b.album_id=c.album_id join album_new a on a.album_name=b.album_name)

在这种情况下,如果还有一张同名专辑,您将遇到问题。 最好用select max(album_id) from album_new的结果增加专辑和歌曲表中的id,然后用insert intoselect *将整个表转移到新的两个表中。

新 如果你还没有..那么很简单..

alter table album set id_album=id_album+(select max(id_album from album_new))
alter table song set id=album=id_album+(select max(id_album from album_new))
insert into album_new(select * from album)
insert into song_new(album_id, song_name) (select album_id, song_name from song)

【讨论】:

  • 感谢您的帮助,但不,我没有插入专辑,而且专辑名称可能重复,所以我不能使用专辑名称作为枢轴
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2010-11-03
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多