You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并两条分类相关SQL查询时报错#1241该如何解决

报错原因解析

你遇到的#1241 - Operand should contain 1 column(s)错误是因为合并后的SQL中,WHERE条件的OR关键字后面直接跟了返回多列的子查询。OR两侧需要是可判断真假的布尔表达式,而你写的子查询返回的是category表的所有字段,不属于布尔判断逻辑,数据库无法识别,因此抛出列数不匹配的错误。
另外你的第一个原始查询逻辑也存在问题:用INNER JOIN article搭配article.category != category.id的条件会产生笛卡尔积,查询结果不是你想要的「无对应博客文章的子分类」,正确逻辑应该是用左连接判断关联的文章为空。

正确合并方案

你需要的是两个结果集的合集,应该用UNION操作符实现,注意要保证两个查询返回的字段数量、字段类型完全一致:

-- 第一部分:查询无对应博客文章的子分类
SELECT c.id, c.name, c.parent, NULL AS article_id
FROM category c
LEFT JOIN article a ON a.category = c.id
WHERE c.parent IS NOT NULL 
  AND a.id IS NULL
GROUP BY c.id

UNION

-- 第二部分:查询所有没有子分类的顶级分类
SELECT c.id, c.name, c.parent, NULL AS article_id
FROM category c
WHERE c.parent IS NULL
  AND c.id NOT IN (
    SELECT parent 
    FROM category 
    WHERE parent IS NOT NULL
  )

逻辑说明

  • 第一部分用LEFT JOIN关联文章表,通过a.id IS NULL筛选出没有对应文章的子分类(c.parent IS NOT NULL筛选子分类)
  • 第二部分查询顶级分类(c.parent IS NULL)中没有子分类的项,逻辑和你原逻辑一致
  • 两个查询返回的字段完全对齐,用UNION自动去重得到合集,如果你不需要去重可以换成UNION ALL提升性能

内容的提问来源于stack exchange,提问作者cyrilovh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:24:03