2015-11-07 75 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

相关问题