Mysql 使用union和join对另一个表中的表进行排序
根据下表,我希望最终输出按部门权重和员工权重排序 职员 多部门工作人员Mysql 使用union和join对另一个表中的表进行排序,mysql,sql,Mysql,Sql,根据下表,我希望最终输出按部门权重和员工权重排序 职员 多部门工作人员 +----+-----+--------+------------+------------+--------+ | id | uid | name | position | department | weight | +----+-----+--------+------------+------------+--------+ | 1 | 2 | Robert | Specialist | ICT
+----+-----+--------+------------+------------+--------+
| id | uid | name | position | department | weight |
+----+-----+--------+------------+------------+--------+
| 1 | 2 | Robert | Specialist | ICT | 1 |
+----+-----+--------+------------+------------+--------+
系
+----+-------------+--------+
| id | department | weight |
+----+-------------+--------+
| 1 | Engineering | 1 |
| 2 | ICT | 2 |
| 3 | Quality | 3 |
+----+-------------+--------+
部分结果
SELECT s.uid
, s.name
, s.position
, s.department
, s.weight
FROM staff s
UNION ALL
SELECT m.uid
, m.name
, m.position
, m.department
, m.weight
FROM multidepartment_staff m;
+-----+--------+-----------------+-------------+--------+
| uid | name | position | department | weight |
+-----+--------+-----------------+-------------+--------+
| 1 | James | Specialist | Quality | 1 |
| 2 | Robert | Specialist | Quality | 2 |
| 3 | Demian | Engineer | Engineering | 3 |
| 4 | Daria | Quality Officer | Quality | 4 |
| 5 | Hanson | IT Officer | ICT | 5 |
| 2 | Robert | Specialist | ICT | 1 |
+-----+--------+-----------------+-------------+--------+
6 rows in set (0.00 sec)
我不确定我是否做得对,但我试过这样做
SELECT s.uid,s.name,s.position,s.department,s.weight
FROM staff AS s
UNION ALL
SELECT m.uid,m.name,m.position,m.department,m.weight
FROM multidepartment_staff AS m JOIN department
AS d ON d.department=s.department
ORDER BY d.department ASC, s.weight ASC;
但我收到了错误
无法在字段列表中使用其中一个选项中的表“d”
如果不仔细看的话,也许你想要的是这样的东西(虽然,乍一看,我真的不明白为什么这里需要department表,也不明白为什么这里有两个单独的员工表)
在工会上,你应该把m.department而不是s.department,然后把订单交给一个全局选择 试试这个
ORDER BY属于UNION ALL结果。该结果中没有d.department。您必须指定输出列名称:
ORDER BY department ASC,weight ASC代码>。或位置:按4个ASC、5个ASC排序
。甚至可以组合:按部门ASC订购,5 ASC
。非常感谢@草莓。你的解决方案有效。员工是多任务和多部门的。department表是用于php的谢谢@axxel95,您的解决方案也运行良好
SELECT s.uid,s.name,s.position,s.department,s.weight
FROM staff AS s
UNION ALL
SELECT m.uid,m.name,m.position,m.department,m.weight
FROM multidepartment_staff AS m JOIN department
AS d ON d.department=s.department
ORDER BY d.department ASC, s.weight ASC;
SELECT uid
, x.name
, x.position
, d.department
, x.weight
FROM department d
JOIN
( SELECT uid
, name
, position
, weight
, department
FROM staff
UNION ALL
SELECT uid
, name
, position
, weight
, department
FROM multidepartment_staff
) x
ON x.department = d.department
ORDER
BY d.department ASC
, x.weight ASC
SELECT * FROM (
SELECT uid,name,position,department,weight FROM staff UNION
SELECT m.uid,m.name,m.position,m.department,m.weight FROM multidepartment_staff m
JOIN department d ON d.department=m.department ) x
ORDER BY department ASC, weight ASC;