2015-11-07 73 views
1

我有一些MS Access 2010中link tables鏈接回第一張表,就像這樣:結SQL查詢回到第一個表

Item    LinkTable 

[ ID  ]   [ ID  ] 
[ ItemName ]-1-------*-[ FromItem ] 
[   ]-1-------*-[ ToItem ] 

圖1:FromItemToItem引用「 Item.ID」

我想作一個鏈接所有三個表,並一起顯示例如follwo查詢ing fields

(from)Item.ItemName | LinkTable.ID | (到)Item.ItemName

我曾嘗試以下SQL語句,但抱怨項目的第二次出現時,在表達的消息「在FROM子句中‘’不能重複表名稱」項目「項目LEFT JOIN LinkTable」下面:

SELECT * 
FROM Item LEFT JOIN 
(
Item LEFT JOIN LinkTable ON (LinkTable.ToItem =Item.ID) 
) 
ON (LinkTable.FromItem = Item.ID); 

Q1:爲什麼我不能鏈接到「起跑表」像這樣不會導致錯誤消息?

Q2:我應該如何定義Select域以顯示from-ItemName和to-ItemName而不會混淆它們? (在這個例子中,我寫 「SELECT *」 簡化)

//羅爾夫

編輯:______________________________________________________

基於由@Andomar(下)我結束了以下工作的回覆碼。我爲了用INNER JOIN代替LEFT JOIN只得到匹配Items

SELECT fro.ItemName 
    ,  lt.ID 
    ,  to.ItemName 
    FROM Item fro 
    INNER JOIN (LinkTable lt 
    INNER JOIN Item to ON lt.toItem = to.ID) 
    ON fro.ID = lt.fromItem; 

回答

2

可以別名表名。例如,這裏把表Item到別名i1

FROM Item i1 

您現在可以再次使用相同的表,並使用不同的別名來識別它。結合圓括號訪問需要多個連接,你會得到:

SELECT i1.ItemName 
,  i2.ItemName 
FROM (Item i1 
LEFT JOIN LinkTable lt ON lt.FromItem = i1.ID) 
LEFT JOIN item i2 ON i2.ID = lt.ToItem 
+0

工程就像一個魅力,謝謝! – RIL

相關問題