2011-06-11 60 views
3
SELECT * from campaigns WHERE id not in 
(SELECT 
    e.id_campaign, d.name, d.frequency, d.country, d.referral, d.bid, d.status, COUNT(e.id) AS countcap 
    FROM campaigns d 
    LEFT JOIN served e 
    ON d.id = e.id_campaign 
    WHERE 
     d.status = 'Active' 
    GROUP BY e.id_campaign 
    HAVING 
     countcap < d.frequency) 

我得到的錯誤 「操作數應該包含1列」 - 但我需要COUNT(e.id)操作數應該包含1列 - MySQL的NOT IN

+0

我想選擇「運動」不匹配的ID匹配SELECT括號內 – reefine 2011-06-11 22:38:13

回答

4

總是有這樣的:

select * 
from campaigns 
where id not in (
    select id_campaign from (
     select e.id_campaign as id_campaign, d.frequency, e.id 
     from campaigns d left join served e on d.id = e.id_campaign 
     where d.status = 'Active' 
     group by e.id_campaign 
     having count(e.id) < d.frequency 
    ) 
) 
+0

第二個子查詢是否創建第二個臨時表?沒有更好的方法嗎? :( – 2013-04-03 19:57:09

+1

@dudelgrincen:這取決於數據庫,通常可以使用LEFT JOIN而不是另一個子查詢,但是HAVING要求使事情變得複雜,我通常只是試圖清楚地表達邏輯並讓數據庫找出它,如果它是太慢,那麼你看數據,索引和查詢計劃,並開始調整。 – 2013-04-03 20:34:41

0

的 '不' 子句預計列表值。因此,如下面的查詢將工作:

SELECT * from campaigns WHERE id not in 
(SELECT 
    e.id_campaign 
    FROM campaigns d 
    LEFT JOIN served e 
    ON d.id = e.id_campaign 
    WHERE 
     d.status = 'Active' 
    GROUP BY e.id_campaign 
    HAVING 
     COUNT(e.id) < d.frequency) 

如果你能告訴我們你要選擇表的結構和內容,我們就可以找出正確的查詢適合您。

+0

當我運行此查詢,我得到「未知列'的所有記錄d.frequency'in'having clause'「 – reefine 2011-06-11 22:35:13

相關問題