Вложенный выбор... из полного внешнего смоделированного соединения
Итак, у меня есть запрос; моделируемый FULL OUTER JOIN
как это:
SELECT * FROM SupplierInfo
LEFT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
UNION
SELECT * FROM SupplierInfo
RIGHT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId;
Однако это вытягивает довольно большой выбор, и мне нужно только 2 - 3 поля: SupplierPartNo
а также MajorEquipmentNo
, Я пробовал что-то вроде этого:
SELECT SupplierPartNo, MajorEquipmentNo FROM(
SELECT * FROM SupplierInfo
LEFT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
UNION
SELECT * FROM SupplierInfo
RIGHT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
);
Но это дает мне ошибку Every derived table must have its own alias: SELECT SupplierPartNo, MajorEquipmentNo FROM( SELECT....
Как я могу сделать SELECT
из предыдущего выбора?
1 ответ
Решение
Если вам нужны эти два конкретных поля из вашего набора данных, вы можете напрямую запросить это так:
SELECT SupplierInfo.SupplierPartNo, MajorEquipment.MajorEquipmentNo
FROM SupplierInfo
LEFT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
UNION
SELECT SupplierInfo.SupplierPartNo, MajorEquipment.MajorEquipmentNo
FROM SupplierInfo
RIGHT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
Если вы все еще хотите использовать свой подход к производным таблицам (который я предлагаю не из-за производительности), то вы можете запросить его следующим образом:
SELECT a.SupplierPartNo, a.MajorEquipmentNo FROM (
SELECT * FROM SupplierInfo
LEFT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
UNION
SELECT * FROM SupplierInfo
RIGHT JOIN MajorEquipment ON SupplierInfo.SupplierId = MajorEquipment.MEId
) a