将SQL查询返回到第一个表

将SQL查询返回到第一个表,sql,ms-access-2010,junction-table,Sql,Ms Access 2010,Junction Table,我有一些MS Access 2010链接表,可以链接回第一个表,如下所示: Item LinkTable [ ID ] [ ID ] [ ItemName ]-1-------*-[ FromItem ] [ ]-1-------*-[ ToItem ] 图1:从项目和到项目参考'Item.ID' 我想做一个查询,将所有三个表链接在一起,并显示以下字段 (from)Item.Item

我有一些MS Access 2010
链接表
,可以链接回第一个表,如下所示:

    Item                LinkTable

[ ID       ]           [ ID        ]
[ ItemName ]-1-------*-[ FromItem  ]
[          ]-1-------*-[ ToItem    ]
图1:
从项目
到项目
参考'Item.ID'

我想做一个查询,将所有三个表链接在一起,并显示以下字段

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

我尝试了以下SQL,但它抱怨第二次出现Item,并在下面的表达式“Item LEFT JOIN LinkTable”中的FROM子句中显示消息“Can not repeat table name”Item:

Q1:为什么我不能像这样链接回“起始表”而不引起错误消息

Q2:我应该如何定义Select字段以显示from ItemName和to ItemName而不混淆它们?(在这个例子中,我写了“Select*”来简化)

//罗尔夫

编辑:\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

根据@Andomar(以下)的回复,我最终得到了以下工作代码。我使用了
内部联接
而不是
左联接
,以便只获取匹配的

   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;

可以为表名添加别名。例如,这会将表
别名为
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
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