如何不使用JOIN仅通过UNION合并employees等三张SQL表
你当前的查询存在两个核心问题:
UNION是用来垂直拼接多个查询结果集(上下合并行)的操作符,要求所有子查询返回的列数、对应位置的列数据类型完全一致。你三个子查询的列类型顺序错位:第一个查询第一列为字符串类型的last_name,第二列为数值类型的department_id;后两个查询第一列为数值类型的ID,第二列为字符串类型的名称,类型不匹配导致返回结果异常。- 如果你需要关联获取员工、对应部门、对应地点的关联信息,应该使用
JOIN水平合并表字段,而非UNION。
如果你需要查询每个员工的姓名、所属部门ID、部门名称、所在地点ID、城市信息,调整后的SQL如下:
SELECT e.last_name Employee_Name, e.department_id, d.department_name, l.location_id, l.city FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id LEFT JOIN locations l ON d.location_id = l.location_id ORDER BY Employee_Name;
如果不需要保留没有分配部门的员工,可以把LEFT JOIN替换为INNER JOIN。
内容的提问来源于stack exchange,提问作者Rizal Maulana
相关产品推荐
相关产品推荐

