嵌套选择...从模拟的完整外连接

时间:2014-03-21 05:26:25

标签: mysql select nested-statement

所以我有一个问题;像这样的模拟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个字段:SupplierPartNoMajorEquipmentNo。我尝试过这样的事情:

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 个答案:

答案 0 :(得分: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