如何根据另一个表从连接表复制记录

时间:2012-09-04 21:00:59

标签: mysql sql

我知道一些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是联接表。

现在,我手动将系统类别添加到控制台的所有已注册游戏中。 在我开始为另一个控制台重复任务的繁琐工作之前,我需要知道的是:有没有办法将注册的类别从一个控制台复制到另一个控制台,而游戏是相同的? < / p>

最有可能的是,但我没有想到。

编辑。澄清。

我已经注册了所有游戏。 (例如,我有ps3的'街头霸王4'和xbox的'街头霸王4'。

我有与一个控制台相关的所有游戏的类别(ps3)。

如果游戏的名称相同,我希望所有的xbox游戏都拥有ps3游戏已有的相同类别。

3 个答案:

答案 0 :(得分:1)

为了完全避免这种情况,我建议您通过另一个“连接表”Consoles_Games在您的游戏和游戏机之间创建多对多关系。这样你就可以对每个游戏进行一次分类,然后在你提到的Consoles_Games表中存储你有哪些游戏机。

答案 1 :(得分: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;

答案 2 :(得分: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]