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」があります。

1 つのコンソール (ps3) に関連付けられているすべてのゲームのカテゴリがあります。

ゲームの名前が同じであれば、すべての xbox ゲームに、ps3 ゲームが既に持っているのと同じカテゴリが必要です。

4

3 に答える 3

1

これを完全に回避するには、別の「結合テーブル」である Consoles_Games を介して、ゲームとコンソールの間にも多対多の関係を作成することをお勧めします。そうすれば、各ゲームを 1 回分類してから、どのゲームをどのコンソール用に持っているかを上記の Consoles_Games テーブルに保存できます。

于 2012-09-04T21:08:36.920 に答える
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;
于 2012-09-04T21:12:12.907 に答える
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]
于 2012-09-04T21:07:31.027 に答える