2011-09-12 3 views
1

더 복잡한 쿼리 내부 SELECT :COUNT()와 나는 현재 다음 쿼리 (실제로 간체) 사용하고

SELECT 
    (
    SELECT COUNT(id) 
    FROM bla_1 
    WHERE id NOT IN (SELECT id FROM blahhh) 
    ) 
+ 
    (
    SELECT COUNT(id) 
    FROM bla_2 
    WHERE id NOT IN (SELECT id FROM blahhh) 
    ) 
as count 

누군가가 그것을 언급하기 전에, 나는 bla_1 추가 할 수 있으며, bla_2가 동일하게 포함되어 있지 않습니다를 비록 단순화 된 질의로 보일지 모르지만 그렇게하는 것이 좋을지도 모른다.

여기서 문제는 두 번째 쿼리에서 계산 된 일부 ID가 이미 첫 번째 ID로 처리된다는 것입니다. 즉, 두 번째 쿼리는 '2'를 반환 할 수 있으며 두 개의 계산 된 행 중 하나는 이미 첫 번째 쿼리에서 계산됩니다. 두 쿼리 내가 두 번 계산하지 않는 공통점이 몇 가지 ID를 갖고 있기 때문에

그래서, 나는 그와 함께 온 :

SELECT 
    (
    SELECT COUNT(id) 
    FROM bla_1 
    WHERE id NOT IN (SELECT id FROM blahhh) 
    ) 
+ 
    (
    SELECT COUNT(id) 
    FROM bla_2 
    WHERE id NOT IN (SELECT id FROM blahhh) 
    AND id NOT IN (SELECT id 
        FROM bla_1 
        WHERE id NOT IN (SELECT id FROM blahhh) 
        ) 
    ) 
as count 

당신은 알 것이다 번째 내부의 두 번째 하위 쿼리 쿼리은 첫 번째 쿼리와 완전히 동일한 쿼리입니다.

제 문제는 동일한 쿼리를 두 번 실행하지 않고서도 결과를 얻을 수있는 첫 번째 시간과 실제로 그 결과를 검색하는 두 번째 시간을 얻을 수 없다는 것입니다. 당신을 위해 중복을 제거 할 UNION 작업을 사용

답변

3

봅니다 :-) 그 문제를 해결하는 것과

많은 사랑.

SELECT COUNT(ID) AS MyCount 
FROM 
( SELECT ID FROM Table1 WHERE /*....*/ 
    UNION 
    SELECT ID FROM Table2 WHERE /*....*/ 
) r 
+1

나는 그 질문을 삭제하고 싶다. 어쨌든 내 눈을 열어 주셔서 감사합니다. D : D – Pioul

관련 문제