2015-02-06 1 views
0

이 두 가지가 동일하지 않은 경우가 있습니까?JOIN이 OUTER JOIN을 통해 어떻게 배포합니까?

A OUTER JOIN (B JOIN C) 
A OUTER JOIN C OUTER JOIN B 
+1

예를 사용하여 이러한 예. 예 : b 조인 c에는 일치 항목이 없습니다. – jarlh

+0

@jarlh : 죄송합니다. 내 업데이트를 참조하십시오. – Eric

+1

"outerjoin"은 SQL 작업이 아닙니다. 왼쪽 외부 조인, 오른쪽 외부 조인 및 완전 외부 조인이 있습니다. 그들은 동일하지 않습니다. –

답변

0

예 : 첫 번째 예 (A OUTERJOIN (B JOIN C))에서

, B 또는 C 중 어느 하나에 일치하는 레코드 모두 B가없고 C가 생략 된 경우.

두 번째 예제 (A OUTERJOIN C OUTERJOIN B)에서 B가 일치하는 레코드가 없어도 C가 반환 될 수 있습니다.

0

여전히 내 의견과 같습니다. B 조 조인 C가 빈 결과 집합을 생성하면 A 외부 조인 "빈 결과 집합"은 A와 동일합니다.

외부 조인 B 외부 조인 C는 다른 것입니다 (적어도 B와 C 중 하나가 . 빈되지 않음) 이후

0

는 같은 첫 번째 옵션을 쓸 명확 것, C에 연결하는 것 같다

당신의 두 가지 옵션 사이의 차이점은 C에서 데이터가 반환 여부
A OUTERJOIN (C JOIN B) 

경우가 이 부분을 보면 방금 두 가지 옵션을 세트로 볼 수 있습니다.

intersect(A,intersect(C,B)) 
intersect(A,C) 

분명히, 두 사람은이 A로 교차하기 전에 첫 번째 형태는 C에서 행을 제거 할 수 있기 때문에 다른 테이블에서만 가능 하나이 보장되지 않기 때문에 당신이 차이를 만들 수 있습니다에 결합 필드 무엇

0

에있는 다른 테이블에 가입 할 필드입니다. 이 경우 테이블 b에는 테이블 c 또는 테이블 a에 조인 할 필드가 있습니까? 그것은 차이를 만든다. 반환 할 필드는 결과 집합과 차이를 만들어 내며 두 가지가 동일한 결과를 반환합니다. 일부 u 리가 데이터가 변경 될 때까지 동등한 것으로 표시되기 때.에 데이터의 상태가 달라집니다. 이러한 것들이 동등한 퀴어가 아니라는 것을 이해하면 이러한 실수를 피하는 데 도움이됩니다. 전체, 왼쪽 또는 오른쪽 외부 조인을 사용하든간에 차이가 있습니다. 그리고 마침내 당신이 추가하는 곳이 어디에서 동등한 것처럼 보이는지에 차이를 만들 수 있습니다.

체크 아웃 임시 테이블 (SQL 서버 구문)

create table #a (aid int, sometext varchar(50)) 
create table #b (bid int, sometext2 varchar(50), cid int, aid int) 
create table #c (cid int, sometext3 varchar(50), aid int) 

insert into #a 
values(1, 'test') , (2, 'test2'), (3, 'test3') 

insert into #b 
values(1, 'test', 1, 2) , (2, 'test2', 2, 1), (3, 'test3', 2, 2) 

insert into #c 
values(1, 'test', 1) , (2, 'test2', 2), (3, 'test3', 1) 


select * 
from #a a 
left outer join #c c on a.aid = c.aid 
left outer join #b b on a.aid = b.aid 

select * 
from #a a 
left outer join #c c on a.aid = c.aid 
left outer join #b b on c.cid = b.cid 

select * 
from #a a 
left outer join #b b 
join #c c on b.cid = c.cid 
on a.aid = b.aid 

select * 
from #a a 
right outer join #c c on a.aid = c.aid 
right outer join #b b on a.aid = b.aid 

select * 
from #a a 
right outer join #c c on a.aid = c.aid 
right outer join #b b on c.cid = b.cid 

select * 
from #a a 
right outer join #b b 
join #c c on b.cid = c.cid 
on a.aid = b.aid 

select * 
from #a a 
full outer join #c c on a.aid = c.aid 
full outer join #b b on a.aid = b.aid 

select * 
from #a a 
full outer join #c c on a.aid = c.aid 
full outer join #b b on c.cid = b.cid 

select * 
from #a a 
full outer join #b b 
join #c c on b.cid = c.cid 
on a.aid = b.aid 
관련 문제