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中文网其他相关文章!