2012-03-28 53 views
0

我有一張桌子,上面有3列'玩家1','玩家2'和'贏家'。我想要'獲勝者'列引用'Player1'或'Player2'列。除了「玩家1」或「玩家2」的條目外,不得插入任何其他內容。我試了MySQL:如何引用同一張表上的兩列?

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

但我得到了一個錯誤。

+1

錯誤是什麼? – Cfreak 2012-03-28 19:31:35

+0

錯誤1005(HY000):無法創建表'mydatabase。#sql-c4_4d'(errno:150) – lazydaemon 2012-03-28 19:38:07

回答

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 2012-03-28 20:04:53

+0

我可以建議的最好的是一個觸發器。我沒有意識到MySql忽略了它們。 – 2012-03-28 20:19:17

0

爲什麼不只是使擁有所有的唯一玩家第二個表的球員。然後在GAMES中,您可以使用Player1和Player2將該表索引到該表中。那麼贏家中的所有3列可能會有一個合理的外鍵約束。

0

引用列和引用列數不匹配。你當然可以在表格中引用兩列。但請參閱兩列兩列。