31

Check 제약 조건에서 SQL 하위 쿼리를 만들 수 있습니까? CHECK 제약 조건의 SQL 하위 쿼리

나는했습니다 열이있는 post 테이블 id, owner
나는했습니다 열 id

post_id -> post.idpost.owner -> user.id

user_id -> user.id 지금은 post(post_id).id != user_id을 제약 조건 싶은와 열이 다른 테이블 actionuser_id, post_id
user 테이블에 action

어떻게 가능합니까?

+0

이 왜 중요할까요? 해결하려는 문제는 무엇입니까? – SingleNegationElimination

답변

51

CHECK 제약 조건의 현재 행을 살펴볼 수 없습니다.

http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html는 말한다 : 표현이 여러 열을 참조 할 수있는 테이블 제약에 나타나는 동안 열 제약으로 지정

점검 제한 조건은 만 해당 컬럼의 값을 참조해야합니다.

현재 CHECK 식에는 하위 행을 포함 할 수 없으며 현재 행의 열 이외의 변수를 참조 할 수 없습니다.

많은 제한 사항이 있지만, 과도한 트래픽을 통해 외발 자전거를 타면서 불타는 횃불을 저글링하고 싶다면 기능을 사용하여 제한을 파괴 할 수 있습니다. 이 상황이 이 아닌이 다시 물러나는 경우는 드뭅니다. 트리거 코드에서 불변성을 강요하는 것이 훨씬 안전합니다.

http://www.postgresql.org/docs/9.1/interactive/triggers.html

하나 개의 테이블을 참조하는 열이 다른 테이블에 존재하는 * A * 값이 일어나는 경우
+19

"과도한 교통으로 외발 자전거를 타면서 저글링 타는 토치"에 대한 +1 :-) –

+4

[Tom Lane의 의견] (http://www.postgresql.org/message-id/[email protected]), 하위 쿼리 제한에 대한 해킹은 권장되지 않습니다. _ "CHECK는 행의 값에 대한 제약 조건을 ** 격리하여 처리합니다 **. 행간 조건을 적용하기 위해이 값을 사용하려고하면 프로젝트가 제대로 종료되지 않습니다. _ – Shane

+2

그렇습니다 : "CHECK는 행의 값에 대한 제약 조건을 격리하여 처리하기위한 것입니다."... 그러나 고유 한 제약 조건은 무엇입니까? "과도한 트래픽을 통해 외발 자전거를 타면서 저글링 타는 것"이라고 할 수 있습니까? 지금까지 불타는 횃불 저글링과 외발 자전거 타기를 모두 시도 했었습니다. 지금까지는 둘 다 할 수는 없지만 앞으로는 가능할 것입니다. – guettli