2011-06-11 62 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

相关问题