2012-11-24 4 views
3

난 그냥 자연이 가입 알게하고 나는 예상대로 SQLite는이 behaning되지 않습니다.SQLite 자연 결합이 끊어 졌습니까?

SELECT * FROM r1 NATURAL JOIN (r2 NATURAL JOIN r3); 

SELECT * FROM (r1 NATURAL JOIN r2) NATURAL JOIN r3; 

동일한 (올바른) 결과를 생성한다. 대신 R1 자연의 직교 제품 R2는 가입, 내가 R1과 R2가 올바르게 그러나 R3는 모든 결과에 가입되지 않은 결합되는 것을 볼 수

SELECT * FROM r1 NATURAL JOIN r2 NATURAL JOIN r3; 

:

그러나 나는 같이 괄호를 생략하면 r3이 형성된다.

처음 가입 결과의 속성 이름에 문제가 있습니까, 아니면 SQL을 잘못 해석하고있다?

답변

2

그 데이터베이스 나 자신을 사용하지 않지만, this documentation에 따르면, 모두 왼쪽과 오른쪽 테이블의 직교 제품을 기반으로 SQLite는에 합류했다.

NATURAL가 결합 된 두 테이블에 "키"와 같은 일반적인 열 이름을 사용하여 결합한다. 괄호를 사용하면 외부 조인이 처리되기 전에 "파생 테이블"이 작성됩니다. 괄호가 없으면 공통 열 이름을 "보지"않으므로 두 번째 NATURAL 키워드는 무시됩니다.

약간의 조언 : NATURAL JOIN이 코드에서 볼 수있는 경우 작동하는 방법을 이해하는 것이 좋지만 직접 사용하는 것이 좋습니다. 가치가 거의없는 "위험한"구조입니다. 그냥 내 의견.

+0

감사합니다. 학교 임무 야. 대부분 OO 언어로 작성하기 때문에 일반적으로 ORM을 사용하여 개발합니다. 그래서 이것은 '표준'동작이 아닙니다 ... –

+0

SQLite 문제인지 확인했습니다. MySQL이 제대로 작동합니다. –

관련 문제