MySQL的 - 具有不同结构

MySQL的 - 具有不同结构

问题描述:

我有库存数据库,其中每一个项目ID来自单个源选择从多个表中的数据。当前主表(cp_partlist)看起来像:MySQL的 - 具有不同结构

- 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 

这工作,只是我从每个表结了一列,而不仅仅是表我很感兴趣,因为它是不同的,我不能指定列名为每个表。

有没有更好的方法来做到这一点?谢谢。

+0

什么结果你需要? – chance 2011-12-15 22:43:10

+0

您的应用程序如何知道要在哪个列中查找结果?它是否已经基于PartID知道应该查找哪些字段,还是只查找非空值? – 2011-12-15 22:46:59

我科幻理解你正确的问题,你希望从cp_partlist表retreive数据与螺栓和垫圈表连接,但是你希望只显示四列,不红旗手您目前收到。

这可以通过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