2011-09-12 37 views
1

我目前使用下面的查詢(確實簡化):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_1bla_2不包含相同數據,即使使用簡化的查詢,它可能看起來如此。

這裏的問題是,由第二個查詢計算的一些ID已經由第一個查詢處理。換句話說,第二個查詢可以返回'2',並且這兩個計數行中的一個已經被第一個查詢計數。

所以,既然這兩個查詢有一些共同的IDS,我不想算兩次,我想出了:

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 – Pioul