Given the following tables, I would like the final output to be sorted by department weight and also staff weight
staff
x
+-----+--------+-----------------+-------------+--------+
| 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 |
+-----+--------+-----------------+-------------+--------+
multidepartment_staff
+----+-----+--------+------------+------------+--------+
| id | uid | name | position | department | weight |
+----+-----+--------+------------+------------+--------+
| 1 | 2 | Robert | Specialist | ICT | 1 |
+----+-----+--------+------------+------------+--------+
department
+----+-------------+--------+
| id | department | weight |
+----+-------------+--------+
| 1 | Engineering | 1 |
| 2 | ICT | 2 |
| 3 | Quality | 3 |
+----+-------------+--------+
A partial result
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)
im not sure if im doing this right but i tried it like this
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;
but i received error
Table ‘d’ from one of the SELECTs cannot be used in field list
Advertisement
Answer
Without looking too closely, perhaps you’re after something like this (although, at a glance, I don’t really see why the department table is required here – nor indeed why there are two separate tables for staff)
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