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
相关产品推荐
相关产品推荐

