为了账号安全,请及时绑定邮箱和手机立即绑定

操作数应包含1列 - MySQL不在

/ 猿问

操作数应包含1列 - MySQL不在

料青山看我应如是 2019-08-23 10:31:48

操作数应包含1列 - MySQL不在

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)


查看完整描述

3 回答

?
白衣染霜花

这总是这样的:

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 
    ))


查看完整回答
反对 回复 2019-08-23
?
侃侃无极

'not in'子句需要一个值列表。因此,以下查询将起作用:

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)

如果您可以告诉我们表的结构以及您想要选择的内容,我们将能够为您找出正确的查询。


查看完整回答
反对 回复 2019-08-23
?
POPMUISE

这取决于数据库。您通常可以使用LEFT JOIN而不是其他子查询,但HAVING要求会使事情复杂化。我通常只是尝试清楚地表达逻辑并让数据库弄清楚,如果它太慢,那么你看一下数据,索引和查询计划并开始调整。

查看完整回答
反对 回复 2019-08-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信