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

MySQL多表查询问题:解决#1222列数不匹配错误,查询分支机构员工信息并去重

解决你的MySQL查询问题

首先,你遇到的#1222错误是因为UNION操作有个核心要求:每个SELECT语句返回的列数必须完全一致,而且对应列的数据类型也要兼容。你写的语句里,第一个SELECT emp_name只返回1列,后面的SELECT branch_name, floor返回2列,列数不匹配自然就触发错误了。

你的需求是关联员工和他们所在的分支机构,获取分支机构名称、楼层和员工姓名,还要消除重复数据。这时候应该用**表连接(JOIN)**而不是UNION——UNION是用来合并多个独立结果集的行,而你需要的是把两张表的关联数据组合到一起。

根据你的表结构,正确的SQL语句应该是这样的:

SELECT DISTINCT b.branch_name, b.floor, e.emp_name
FROM employee e
JOIN branch b ON e.branch_no = b.branch_no;

我来拆解一下这个语句:

  • JOIN branch b ON e.branch_no = b.branch_no:通过两张表的branch_no字段(这是关联两张表的关键),把员工表和分支机构表连接起来,这样就能拿到每个员工对应的分支机构信息。
  • SELECT DISTINCT:用来自动过滤掉重复的行,满足你“消除重复数据”的需求。
  • 字段前面的e.和b.是表的别名,用来区分两张表的字段(虽然这里没有重名字段,但用别名能让语句更清晰,后续维护也方便)。

如果存在部分员工没有关联的分支机构(比如employee表的branch_no为NULL),而你想把这些员工也列出来的话,可以把JOIN改成LEFT JOIN,这样即使员工没有对应的分支机构,也会显示员工姓名,分支机构的字段会显示为NULL:

SELECT DISTINCT b.branch_name, b.floor, e.emp_name
FROM employee e
LEFT JOIN branch b ON e.branch_no = b.branch_no;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:22:45