2012-03-28 10 views
0

私は3つの列 'Player1'、 'Player2'と 'Winner'を持つテーブルを持っています。私は '勝者'列に 'Player1'または 'Player2'列のいずれかを参照させたい。 'Player1'または 'Player2'のエントリ以外のものは挿入しないでください。私はそれを試しましたMySQL:同じテーブルの2つの列を参照する方法は?

ALTER TABLE GAMES 
ADD CONSTRAINT fk_winner FOREIGN KEY (WINNER) REFERENCES GAMES (PLAYER1, PLAYER2); 

私はエラーが発生しました。

+1

何が問題だったのですか? – Cfreak

+0

エラー1005(HY000):テーブル 'mydatabase#sql-c4_4d'(errno:150)を作成できません – lazydaemon

答えて

2

残念ながら、そのような外部キーを作成することはできません。これをデータベースに適用する場合は、トリガーを使用する必要があります。

0

ただ、制約を追加します。

ALTER TABLE GAMES 
ADD CHECK (WINNER = PLAYER1 OR WINNER = PLAYER2); 
+1

http://dev.mysql.com/doc/refman/5.0/en/create-table.html "CHECK句は解析されますが、すべてのストレージエンジンで無視されます" – lazydaemon

+0

私が提案できるベストはトリガーです。私はMySqlがそれらを無視したことを認識しませんでした。 –

0

理由だけではなく、すべての固有のプレイヤーを有する第2のテーブルPLAYERSをしません。次に、GAMESでは、Player1とPlayer2でそのテーブルにインデックスを作成するだけです。勝者の3つの列すべてが意味をなされる外部キー制約を持つことができます。

0

参照元と参照先の列の数が一致しません。もちろん、テーブルの2つの列を参照できます。しかし、2つの列と2つの列を参照してください。

関連する問題