2015-05-09 176 views
1

我有5張桌子,SQL查詢多個表

機(機號,名稱),

工程師(的engineerID,名稱),

零件(PARTID,名稱) ,

故障(FaultID,MachineID的engineerID,說明,日期),

FaultParts(FaultID,PARTID

重點= (粗體),外鍵(斜體),複合(斜體&加粗)

故障可能需要多個部分修復它

我想查詢數據庫,以便我可以檢索工程師名稱,機器名稱,故障描述和零件需要修復。

我不確定我應該如何有效地做到這一點,或者如果表應該設置爲原樣。

任何幫助將不勝感激, 謝謝。

回答

0

我覺得這stackflow答案可能幫助:Query results based on multiple records using compound primary key

您可以使用(在你的GridView即對於每個所選行)添加OR子句IDS的每三人在單個查詢做到這一點。例如:

SELECT whatever 
FROM Table1 
WHERE (KeyCol1=val1-1 AND KeyCol2=val1-2 AND KeyCol3=val1-3) 
OR (KeyCol1=val2-1 AND KeyCol2=val2-2 AND KeyCol3=val2-3) 
OR .. etc 
2

試着加入所有相關的表格,如:

SELECT e.name, m.name, f.description, p.name 
FROM Machine m INNER JOIN Faults f ON m.id = f.machineId 
INNER JOIN Engineers e ON e.id = f.engineerId 
INNER JOIN faultParts fp ON fp.faultId = f.id 
INNER JOIN parts p ON p.id = fp.partId 
1

您需要從faults表開始查詢,並加入其他表與所需的字段,當您去。對於多個部分,您可以使用具有group_concat函數的聚合查詢:

SELECT f.description, e.name, m.name, fpp.parts 
FROM faults f 
JOIN engineers e ON f.engineerid = e.engineerid 
JOIN machines m ON f.machineid = m.machineid 
JOIN (SELECT faultid, GROUP_CONCAT(name) AS parts 
     FROM  faultparts fp 
     JOIN  parts p ON fp.partid = p.partid 
     GROUP BY faultid) fpp ON f.faultid = fpp.faultid 
+0

謝謝,這就是我一直在尋找 – rj93