【问题标题】:Operand Should Contain 1 Column - MySQL NOT IN操作数应包含 1 列 - MySQL NOT IN
【发布时间】:2011-06-11 19:58:11
【问题描述】:
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)

【问题讨论】:

  • 我正在尝试从“广告系列”中选择与括号内的 SELECT 匹配的 ID 不匹配的所有记录

标签: mysql sql mysql-error-1241


【解决方案1】:

总是这样:

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

【讨论】:

  • 第二个子查询不会创建第二个临时表吗?难道没有更好的办法吗? :(
  • @dudelgrincen:这取决于数据库。您通常可以使用 LEFT JOIN 而不是另一个子查询,但是 HAVING 要求使事情复杂化。我一般只是尽量把逻辑表达清楚,让数据库自己去解决,如果太慢就看数据、索引、查询计划,然后开始调优。
【解决方案2】:

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

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

【讨论】:

  • 当我运行这个查询时,我得到“'have Clause'中的未知列'd.frequency'”
【解决方案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....
)

您正在检查 id not in 所以,您应该只检查一列的检查 id。

你可以这样写(它可能达不到你的目的):

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
    countcap < d.frequency
)

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多