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;