我有两张牌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
答案 0 :(得分: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 into
和select *
将新表格中的整个表格转移。
NEW 如果你还没有......那么很简单......
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)