2017-01-31 98 views
1

我正在使用Microsoft Access。SQL訪問:兩個表之間的多個內部聯接

我有兩個表,生產和試劑。

Reagents 
- Reagent Reference ID (text) 
- Supplier (text) 

Production 
- Production Reference ID (text) 
- C Reference ID (text) (matches Reagents.Reagent Reference ID) 
- P Reference ID (text) (matches Reagents.Reagent Reference ID) 

我試圖建立一個查詢鏈接C和P(從試劑)的供應商到生產參考ID(從生產),如下圖所示。

Query Output 
- Production Reference ID 
- C Supplier 
- P Supplier 

下面是我到目前爲止,但它告訴我我失去了一個操作員。

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.Reagent Reference ID=Production.C Reference ID 
INNER JOIN Reagents AS P ON P.Reagent Reagent Reference ID=Production.P Reference ID 
WHERE Production.Production Reference ID=? 

在此先感謝!

+0

那麼C參考ID和P參考ID是相同的? – Magisch

+0

C引用ID將沿着C00001的行,而P引用ID將沿着P00001的行,並且P和C將永遠不匹配。試劑參考ID下包括P參考ID和C參考參考ID。 –

+0

不知道你是否嚴格需要一個連接,但我使用下面的子查詢給出了一個解決方案。我在我自己的訪問數據庫上用類似的表格對它進行了測試,結果很奏效。請注意緩慢,如果你超過了幾千條記錄,並沒有條件雖然 – Magisch

回答

2

你可以試試這個方法(這是使用子查詢,謹防可能有些慢,如果表是大):

SELECT Production.[Production Reference ID], 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[C Reference ID]) as CSupplier, 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[P Reference ID]) as PSupplier 
FROM Production; 

編輯:對於某些測試,我發現它是如何工作在JOIN中也是如此,並且它比方法1快得多:

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM (Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number]) 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 

MS Access在查詢中使用多個JOIN時需要括號。

+0

這對我來說非常合適 - 桌子永遠不會變得太大,所以在可預見的將來,這應該很適合。非常感謝! –

+0

@JamesBoxall請記住,您可以通過點擊選票旁邊的綠色複選標記來接受其中一個答案,以表明它對您有用。另外我認爲,如果你把適當的括號(訪問與這些finnicky),斯蒂芬的答案將工作。 – Magisch

+0

@JamesBoxall我想出了一個JOIN版本,缺少括號。這個也更快。 – Magisch

0

嘗試在括號[]上封裝字段名,如下所示。

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number] 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 
+0

這看起來像我應該工作,但它給了我錯誤: 在查詢表達式'C中的語法錯誤(缺少運營商)。[試劑參考編號] =生產[C參考編號] 內部連接試劑AS P ON P. [試劑試劑編號] =生產[P參考編號]。 –

+0

你有一個共同的錯誤在那裏。使用多於一個JOIN時MS Access需要括號。 – Magisch

+0

我需要我的第一個內部連接的支架,如下所示: FROM(生產 INNER JOIN試劑AS C ON C. [試劑編號] =生產[C參考編號])INNER JOIN ... 使用括號地方,這個作品很棒! - 道歉Magisch,只是剛剛注意到你的評論! –