2013-03-25 1 views
1

테이블을 표시하기 위해 내 웹 사이트에 구현 될 SQL 쿼리로 작업하고 있습니다. 이 특정 쿼리는 하나의 표 셀에 셀 수를 채 웁니다.두 개의 필터를 사용할 때 SQL 쿼리가 작동하지 않습니다.

아래의 마지막 INNER JOIN 덕분에 기본 키 (column1)가 표 5에서 3 번 미만으로 발견되면 행을 계산합니다. 여기까지 쿼리가 완벽하게 작동합니다.

SELECT COUNT (a.column1) AS test 
    FROM Table1 a 
    INNER JOIN Table2 b ON […] 
    INNER JOIN Table3 c ON […] 
    INNER JOIN Table4 d ON […] 
    INNER JOIN (SELECT column1 FROM Table 5 GROUP BY column1 HAVING COUNT (column1)<3) e ON e.column1=a.column1 
    WHERE a.column2 IS NULL 

문제점은 또한 Table5에 나타나지 않지만 (표 1에는 있음) 행을 계산하려고한다는 것입니다. 나는 일이 입수 한 현재 유일한 방법은

AND a.column1 NOT IN (SELECT f.column1 FROM Table5 f) 

그러나, 그것은 단지 최종 INNER가 포함되어 있지 않습니다 가입 할 때, 나는 그것이 모두 제약 동작하지 않습니다 작동하는 다음 코드를 추가하는 것입니다. 기본적으로 요약하자면 기본 키 (column1)가 table5에서 3 번 미만으로 표시되거나 단순히 table5에없는 경우 행을 계산하도록합니다.

감사합니다.

+0

제로가 3보다 작? –

+0

@ PM77-1 NULL이 0이 아니기 때문에? – Lamak

+0

@ PM77-1이 조건은 기본 키 (column1)가 table5에있는 횟수를 계산합니다. 따라서 0은 기본 키가 발견되지 않았다는 것을 의미합니다 (그러나 그 키가없는 것은 계산되지 않습니다). 이것이 내가이 문제를 처음부터 가진 이유입니다. – BillyCode

답변

2
당신은 LEFT JOIN을하고 WHERE<3과없는 존재 조건을 추가 할 필요가

: 당신이 두 번째 조건이 필요합니까 왜

SELECT COUNT (a.column1) AS test 
FROM Table1 a 
INNER JOIN Table2 b 
    ON […] 
INNER JOIN Table3 c 
    ON […] 
INNER JOIN Table4 d 
    ON […] 
LEFT JOIN (SELECT column1 , COUNT(column1) N 
      FROM Table5 
      GROUP BY column1) e 
    ON e.column1=a.column1 
WHERE a.column2 IS NULL 
AND (e.N<3 OR e.column1 IS NULL) 
+1

+1 질의는'<3'을 더 필요로합니다! – Andomar

+0

@Andomar 하하, 이상한 이유는 +1을 얻었습니다 :-) – Lamak

관련 문제