2014-11-15 1 views
0

다음과 같은 두 가지 쿼리가 있습니다. Query1은 행 개수로 1000을 반환하며 Query2는 행 개수로 4000을 반환합니다. 누군가가 두 쿼리의 차이점을 설명해 주실 수 있습니까? 나는 둘 다 같은 수를 돌려 주길 바랬다.두 쿼리 간의 차이 - 대입 IN

에 Query1 :

SELECT COUNT(*) 
FROM TableA A 
WHERE A.VIN IN (
    SELECT VIN 
    FROM TableB B, TableC C 
    WHERE B.MODEL_YEAR = '2014' AND B.VIN_NBR = C.VIN 
) 

QUERY2 :

SELECT COUNT(*) 
FROM TABLEA A, TableB B, TableC C 
WHERE B.MODEL_YEAR = '2014' AND B.VIN_NBR = C.VIN AND A.VIN = C.VIN 
+0

a.vin – Randy

답변

1

많은 경우에, 그들은 같은 대답을 반환하지만 필요하지. 첫 번째는 조건에 맞는 A의 행 수를 계산합니다. 일치하는 수에 관계없이 각 행은 한 번만 계산됩니다. 두 번째 행은 행 수를 늘릴 수있는 join입니다.

두 번째 쿼리는 count(distinct A.id) (id이 고유하거나 기본 키인 경우)의 결과에서 동일합니다.

그렇다고 기능적으로는 비슷하지만 실행 방법은 상당히 다를 수 있습니다. 다른 SQL 엔진은 하나의 버전 또는 다른 버전을 최적화하는 데 더 효과적 일 수 있습니다.

그런데 사용중인 구식 join 구문은 피해야합니다. 1992 년 이래로 명시 적 조인은 SQL 구문의 일부였습니다.

+0

에 대한 여러 행을 반환 할 가능성이 높습니다. 구식 조인 구문에 확실히 동의합니다. 나는 거의 두 번째 쿼리가 첫 번째 쿼리와 비교했을 때 크게 늘어날 수있는 교차 제품이 있다고 생각했습니다. – misterManager