2012-11-25 2 views
3

두 개의 테이블이 있습니다. 차량 및 소유권. OWNERSHIP 테이블에 모든 차량 목록 이 아닌을 제공하는 쿼리를 작성하려고합니다. 기본적으로 사용할 수있는 차량 인벤토리 보고서가 필요합니다.멀티 테이블 Access Query에서 동일하지 않음

SELECT VEHICLE.* 
FROM VEHICLE, OWNERSHIP 
WHERE (VEHICLE.VEH_ID <> OWNERSHIP.VEH_ID); 

임 점점 : :이 쿼리를 시도 enter image description here

나는 동일한 작업을 수행 할 때 내가 얻을 작동하도록 소유권에 나열된 모든 차량. 그러나 NOT 평등은 그렇지 않습니다. 어떤 아이디어?

답변

2

는 테이블이 많은 행을 포함하는 경우 속도가 느려질 수 있습니다

SELECT VEHICLE.* 
FROM VEHICLE 
WHERE NOT EXISTS 
(SELECT NULL FROM OWNERSHIP WHERE VEHICLE.VEH_ID= OWNERSHIP.VEH_ID); 
+0

이렇게했습니다. 고맙습니다. – Batman

+0

나는 이걸 배우려고 노력하고있어, 내가 잘못 설명하면 알려줘. 서브 쿼리는 차량과 소유권에있는 차량을 찾는 것입니다. 바깥 쪽 질의는 차량과 소유권에 속하지 않는 것으로 확인 된 모든 차량을 선택하는 반면. 이 올바른지? 상관 관계가있는 하위 쿼리로 간주 되나요? – Batman

+1

@Batman : 예, 맞습니다. 이러한 하위 쿼리는 상관 관계로 간주 될 수 있습니다. 그러나 그것은 항상 성능이 좋지 않다는 것을 의미하지는 않습니다. 옵티마이 저는 모든 행에 대해 실행되지 않을만큼 똑똑합니다. MS = Access가 왼쪽 결합을 지원하는지 100 % 확신하지는 않지만 위 쿼리는 동일합니다. SELECT v. * FROM vehicle v LEFT JOIN 소유권 o ON (o.veh_id = v.veh_id) where o.veh_id IS NULL'이며 동일한 실행 계획을 생성해야합니다. – a1ex07

1

NOT EXISTS 방법을 사용해보십시오. 훨씬 더 빨라질 수있는 대체 접근법은 WHERE 절과 함께 LEFT JOIN을 사용하여 오른쪽 조인 필드가 Null 인 행만 리턴하는 것입니다.

SELECT VEHICLE.* 
FROM 
    VEHICLE AS v 
    LEFT JOIN OWNERSHIP AS o 
    ON v.VEH_ID = o.VEH_ID 
WHERE o.VEH_ID Is Null; 

액세스 '를 사용할 수있는 유사한 쿼리를 만드는 "비교할 수없는 쿼리 마법사 찾기".

두 표가 모두 작 으면 차이를 느끼지 못할 것입니다. 그러나 그 차이가 눈에 띄는지를 쉽게 확인해야합니다. 그리고이 접근법은 시간이 지남에 따라 테이블이 상당히 성장하면 더 효과적으로 도움을 줄 것입니다.

관련 문제