我有一个库存数据库,其中每个商品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
除了我最终得到每个表中的列,而不仅仅是我感兴趣的表之外,这是有效的。我不能指定列名,因为每个表的列都不同。
有更好的方法吗?感谢。
答案 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