Результат применения
Таблица 10.9. Результат применения операции union join вместе с предложением
ID | Name | ProjectName | Skill |
1 | Ferguson | X-63 Structure | NULL |
1 | Ferguson | X-64 Structure | NULL |
1 | Ferguson | NULL | Mechanical Design |
1 | Ferguson | NULL | Aerodynamic Loading |
2 | Frost | X-63 Guidance | NULL |
2 | Frost | X-64 Guidance | NULL |
2 | Frost | NULL | Analog Design |
2 | Frost | NULL | Gyroscope Design |
3 | Toyon | X-63 Telemetry | NULL |
3 | Toyon | X-64 Telemetry | NULL |
3 | Toyon | NULL | Digital Design |
3 | Toyon | NULL | R/F Design |
Можно получить чуть более ясный результат, если в оператор SELECT вставить еще одно предложение COALESCE, как это сделано в следующем примере:
SELECT COALESCE (E.EmpID, P.EmpID, S.EmpID) AS ID,
E.Name, COALESCE (P.Type, S.Type) AS Type,
P.ProjectName, S.Skill
FROM EMPLOYEE E
UNION JOIN (SELECT "Project" AS Type, *
FROM PROJECTS) P
UNION JOIN (SELECT "Skill" AS Type, *
FROM SKILLS) S
ORDER BY ID, Type ;
В первом предложении UNION JOIN таблица PROJECTS заменена вложенным предложением SELECT, которое добавляет к столбцам, взятым из этой таблицы, еще один столбец, Р.Туре, с постоянным значением "Project" (проект). И, аналогично, во втором предложении UNION JOIN таблица SKILLS заменена другим вложенным предложением SELECT, которое добавляет к столбцам, взятым из этой таблицы, еще один столбец, S.Type, с постоянным значением "Skill" (квалификация). В каждой строке значением Р.Туре является или NULL, или "Project", а значением S.Type — или NULL, или "Skill".
В списке внешнего предложения SELECT указано выполнение операции COALESCE, при которой два столбца Туре должны стать одним, также имеющим имя Туре. Затем этот новый столбец Туре указывается в предложении ORDER BY, которое таким образом сортирует все строки, чтобы вначале шли строки с проектами, а затем — с квалификационными навыками. Результат показан в табл. 10.10.