首页 >数据库 >mysql教程 >为什么我的 MySQL `NOT IN` 多列子查询返回'操作数应该包含 1 列”?

为什么我的 MySQL `NOT IN` 多列子查询返回'操作数应该包含 1 列”?

Susan Sarandon
Susan Sarandon原创
2025-01-12 09:48:43821浏览

Why Does My MySQL `NOT IN` Subquery with Multiple Columns Return

MySQL NOT IN 子查询多列导致的“操作数应包含 1 列”错误

在使用包含多列的子查询的 NOT IN 子句时遇到“操作数应包含 1 列”错误是很常见的。此错误源于 NOT IN 子句期望子查询只返回单列的限制。

在提供的查询中:

<code class="language-sql">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
)</code>

子查询返回八列 (id_campaign, name, frequency, country, referral, bid, status, 和 countcap)。然而,NOT IN 子句需要单列进行比较。

解决方案:

为了解决此错误,我们需要修改子查询使其只返回 id_campaign 列,这是我们在主查询中要检查非成员关系的列:

<code class="language-sql">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
    ) AS subquery
);</code>

通过将子查询结果限制为单列 id_campaign,我们消除了“操作数应包含 1 列”错误,并确保 NOT IN 子句能够正确地执行比较操作。 注意,我们添加了一个别名 subquery 来更清晰地组织查询。 这个修改后的查询将只返回 campaigns 表中 id 不在子查询结果中的行。

以上是为什么我的 MySQL `NOT IN` 多列子查询返回'操作数应该包含 1 列”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn