2014-03-29 57 views
0

我有兩個表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

如果歌曲表的id出去以便對於該專輯中的其他歌曲這對沒有問題的。您可以通過ID識別相冊,您的問題是什麼? – AndreaTaroni86

+0

我想插入相冊到另一張桌子,所以如果其他桌子已經有5張相冊,相冊'abs'的id將是6,'def'將是7,當我將歌曲表格插入另一個表格時。雅虎歌曲顯示在錯誤的專輯 –

+0

下你可以添加一個偏移量到ID等於其他表的最大值,我去電腦並儘快寫下它。 – AndreaTaroni86

回答

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 *轉移新的兩個表中的整個表。

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) 
+0

感謝您的幫助,但沒有我沒有插入相冊已經和ablum名稱可以複製,所以我不能使用專輯名稱作爲樞軸 –

+0

添加您需要的代碼。 – AndreaTaroni86

+0

感謝您的幫助,我認爲它會起作用 –

相關問題