2011-08-24 2 views
2
내가 완전 외부을 시도

은 테이블의 하나/모두에 포함되어있는 ID를 조사하기 위해 두 테이블 MS Access에서 CMVSCTOXOSC의 조인 쿼리를 실행할 수MS Access 전체 외부 조인에서 설명 할 수없는 동작이 발생합니까?

(SELECT * FROM CMVSC LEFT JOIN TOXOSC ON CMVSC.ID = TOXOSC.ID) 
UNION 
(SELECT * FROM TOXOSC LEFT JOIN CMVSC ON TOXOSC.ID = CMVSC.ID); 

하지만, 내가 기대했던 것을 낳지는 않는다. CMVSC에서 (ID를 오름차순으로 분류)

처음 몇 기록

은 다음과 같습니다

ID  TOXO_NEGDATE TOXO_POSDATE 
10120 22.11.1993 05.04.1991 
10261 09.02.1998 23.02.1996 

그리고 여기에 있습니다 : TOXOSC에 (ID를 오름차순으로 분류)

ID  CMV_NEGDATE CMV_POSDATE 
10245 04.02.2010 28.06.1999 
10642 08.10.1998 05.09.1991 

처음 몇 기록이 있습니다 위의 쿼리의 처음 두 레코드 :

CMVSC.ID CMV_NEGDATE CMV_POSDATE TOXOSC.ID TOXO_NEGDATE TOXO_POSDATE 
10120 22.11.1993 05.04.1991   
10245 04.02.2010 28.06.1999   

TOXOSCCMV* 변수에 할당되었습니다. 마찬가지로 CMVSC의 레코드와 같습니다.

어떻게 가능합니까?

답변

4

첫 번째 하위 쿼리의 첫 번째 테이블은 CMVSC이고 그 다음은 TOXOSC입니다. 두 번째 하위 쿼리의 순서는 반대입니다. UNION은 열이 첫 번째 하위 쿼리 (즉, 믹싱)의 제목으로 제목을 사용함에 따라 열을 가져옵니다. 이 시도 :

(SELECT CMVSC.*, TOXOSC.* FROM CMVSC LEFT JOIN TOXOSC ON CMVSC.ID = TOXOSC.ID) 
UNION 
(SELECT CMVSC.*, TOXOSC.* FROM TOXOSC LEFT JOIN CMVSC ON TOXOSC.ID = CMVSC.ID); 

또 다른 방법은 LEFTRIGHT 모두 조인을 사용하는 것입니다 :

(SELECT * FROM CMVSC LEFT JOIN TOXOSC ON CMVSC.ID = TOXOSC.ID) 
UNION 
(SELECT * FROM CMVSC RIGHT JOIN TOXOSC ON TOXOSC.ID = CMVSC.ID); 
+0

나는'UNION'가 열 식별자를 무시 기대하지 않았다. 이 표준 SQL92 동작입니까 아니면 액세스 보치입니까? – blubb

+0

이것은 표준입니다. 'UNION'은 열 식별자를 사용하지 않지만 열 목록의 순서 (첫 번째 하위 쿼리 이외의 모든 제목은 무시됩니다). –

+2

@ Simon Stelling : SQL-92는 [UNION CORRESPONDING']을 제공합니다 (http://books.google.co.uk/books?id=406_pJtiJ6sC&pg=PA119&dq=%22SQL+and+Relational+Theory%22+%22How+ + + + 정확한 + SQL + 코드 % 22 + % 22union + 해당 % 22 & hl = en & ei = IvZUTuDrHMjAtAa0oKn2Dw & sa = X & book = result & resnum = 1 & ved = 0CCsQ6AEwAA # v = onepage & q & f = false) 말할 필요도없이, Access 팀은 아직 구현하지 않았습니다 : ( – onedaywhen