mysql - 从具有不同结构的多个表中选择数据

时间:2011-12-15 22:32:26

标签: mysql

我有一个库存数据库,其中每个商品ID都来自一个来源。目前主表(cp_partlist)看起来像:

- PK_PartID
- TableName

然后我为每种类型的项目都有单独的表格,每个表格都有不同的数据。例如,我可能有一个螺栓表,其中包含:

- FK_PartID
- ThreadType
- Length
- DriveType

和洗衣机表格:

- FK_PartID
- OD
- ID
- Thickness

如果我想要给定PartID的特定信息,那么我现在正在查找主表中的表名,然后使用它来从正确的表中获取我想要的特定数据。

似乎应该有更直接的方法。我尝试使用LEFT JOIN,如:

    SELECT * FROM cp_partlist AS pl
      LEFT JOIN bolts ON pl.PK_PartID=bolts.FK_PartID
      LEFT JOIN washers ON pl.PK_PartID=washers.FK_PartID
    WHERE PK_PartID=400004

除了我最终得到每个表中的列,而不仅仅是我感兴趣的表之外,这是有效的。我不能指定列名,因为每个表的列都不同。

有更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我理解你的问题是正确的,你希望从你的cp_partlist表中检索数据与螺栓和垫圈表连接,但是你希望只显示四列,而不是你目前得到的八列。

这可以使用UNION语句实现,但每个JOIN ed列的字段类型必须属于同一类型。

因此可以使用这样的查询(如果满足上述条件)

SELECT pl.*, bolts.FKPartID,bolts.ThreadType AS Data1,bolts.Length AS Data2, bolts.Drivetype as Data3  FROM cp_partlist AS pl 
LEFT JOIN bolts ON pl.PK_PartID=bolts.FK_PartID 
WHERE PK.PartID=400004

    UNION

SELECT pl.*,washers.FKPartID,washers.OD AS Data1,washers.ID as Data2, Washers.thickness as Data3 FROM cp_partlist as pl 
LEFT JOIN washers ON pl.PK_partID = washers.FK_partID 
WHERE PK.PartID=400004

请注意,这将产生一个包含以下列的表:

PK_PartID,Tablename,FK_PartID,Data1,Data2,Data3