2012-09-04 41 views
0

我知道一些sql但不足以完成此任務,這就是爲什麼標題問題看起來有點奇怪。 = P如何從基於另一個表的連接表中複製記錄

我有如下所示(汽提空間大量的數據)的一些表

**Consoles** 
id   INT 
console  VARCHAR 

**Games** 
id   INT 
console_id INT 
game  VARCHAR 

**Categories** 
id   INT 
category VARCHAR 

**Categories_Games** 
id   INT 
category_id INT 
game_id  INT 

Categories_Games爲連接表。

現在,我手動將系統類別添加到控制檯的所有註冊遊戲中。 在我開始重複另一個控制檯任務的繁瑣工作之前,我需要知道的是:有沒有辦法將已註冊的類別從一個控制檯複製到另一個控制檯,其中的遊戲是相同的?

最有可能的是,但我沒有數。

編輯。澄清。

我已經註冊了所有遊戲。 (舉例來說,我有PS3的「街頭霸王4」,併爲Xbox「街頭霸王4」。

我有關聯到一個控制檯(PS3)的所有遊戲類別。

我希望所有的Xbox遊戲具有相同類別的PS3遊戲已經有了,如果遊戲的名稱是相同

+0

見第二次SQL中我的答案, –

回答

1

在您的模型中,類別與遊戲相關,而不是控制檯。遊戲與遊戲機有關。你想將遊戲從一個控制檯複製到另一個控制檯嗎?假設ID是AUTO_INCREMENT,你要複製的Xbox遊戲Wii遊戲,試試這個:

insert into consoles(console) values('wii'); 

insert into games(console_id,game) 
select wii.id,g.game 
from games g 
join consoles x 
on x.console_id = g.console_id 
join consoles wii 
on wii.console = 'wii' 
where x.console = 'xbox'; 

根據您的澄清,這樣做:

insert into categories_games(category_id,game_id) 
select cg.category_id,other_game.game_id 
from games ps3_game 
join console ps3 
    on ps3.console = 'ps3' 
    and ps3.console_id = ps3_game.console_id 
join categories_games cg 
    on cg.game_id = ps3_game.game_id 
join games other_game 
    on other_game.game = ps3_game.game 
    and other_game.console_id <> ps3_game.console_id; 
+0

遊戲已經註冊了所有遊戲機,但只有一個控制檯(可以說'playstation 3')有類別,我需要複製類別,而不是遊戲。 – petervaz

+0

我同意@poplitea,也許你應該有另一個桌面遊戲控制檯遊戲,它具有特定控制檯和桌面遊戲的實際物理遊戲盒式磁盤/磁盤的概念,可以是所有控制檯的一般遊戲的概念。這將避免整個問題。 –

+0

這做了很少修改的契約。感謝幫助。關於poplitea的建議,它可能會更好,但該船已經航行。無論如何,我很滿意目前的設置,因爲這個查詢解決了最糟糕的問題。現在我只需要添加不通用於所有遊戲機的遊戲,無論如何我都不得不這樣做。再次感謝。 – petervaz

0

當然只是這樣做:

INSERT INTO categories_games 
SELECT [INTEGER GAME ID YOU WISH TO ADD], category_id FROM categories_games WHERE game_id = [INTEGER GAME ID OF GAME YOU WISH TO COPY] 
1

要完全避免這種情況,我建議你創建一個多一對多的關係您的遊戲和控制檯,以及另一個「連接表」Consoles_G埃姆斯。這樣,您可以對每個遊戲進行一次分類,然後將所擁有的哪些遊戲存儲在所提及的Consoles_Games表中。

相關問題