2013-03-25 57 views
1

我正在研究一個SQL查詢,該查詢將被實現到我的網站中以顯示一個表。這個特定的查詢將只填充一個表格單元格和它計數的數字。當使用兩個過濾器時SQL查詢不起作用

當前感謝下面的最後一個INNER JOIN,它只在表5中的主鍵(column1)被發現少於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(但存在於Table1中)的行。目前,我得到這個工作的唯一途徑是通過添加以下代碼

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

但是,它只能在最後的INNER JOIN不包括在內,我不能讓它與兩個約束工作。基本上,總結一下,如果主鍵(column1)在table5中出現的次數少於三次,或者如果它不在table5中,那麼我希望計數行。

謝謝。

+0

零小於3爲什麼需要第二個條件? – 2013-03-25 19:59:55

+0

@ PM77-1因爲'NULL'不是零? – Lamak 2013-03-25 20:02:50

+0

@ PM77-1該條件計算在表5中找到主鍵(column1)的次數。因此0意味着主鍵從未找到(但它不能計算那些不存在的東西)。這就是爲什麼我首先遇到了這個問題。 – BillyCode 2013-03-25 20:04:39

回答

2

你需要做一個LEFT JOIN並添加<3和不存在的條件對WHERE

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 2013-03-25 20:00:10

+0

@Andomar哈哈,奇怪的原因是我有+1 :-) – Lamak 2013-03-25 20:03:27

相關問題