2012-03-28 9 views
0

3 개의 'Player1', 'Player2'및 'Winner'열이있는 테이블이 있습니다. 'Winner'열에서 'Player1'또는 'Player2'열을 참조하고 싶습니다. 'Player1'또는 'Player2'항목보다 삽입 할 항목이 없습니다. 나는 그것을 시도했다MySQL : 동일한 테이블의 두 열에 대한 참조 방법은 무엇입니까?

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

나는 오류가 발생했다.

+1

무엇이 오류입니까? – Cfreak

+0

ERROR 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

왜 그냥 모든 고유 선수가 두 번째 테이블의 선수가되지. 그런 다음 GAMES에서 Player1 및 Player2를 사용하여 해당 테이블에 색인을 생성 할 수 있습니다. 승자의 모든 3 열에 외래 키 제약 조건이 적용될 수 있습니다.

0

참조 및 참조 된 열의 수가 일치하지 않습니다. 물론 테이블의 두 열을 참조 할 수 있습니다. 그러나 두 개의 열과 두 개의 열을 참조하십시오.

관련 문제