交汇点 SQL 查询回到第一个 Table

Junction SQL Query back to First Table

我有一些 MS Access 2010 link tables link 回到第一个 table,像这样:

    Item                LinkTable

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

图1:FromItemToItem引用'Item.ID'

我想查询 link 所有三个 table 并显示例如以下字段

(来自)Item.ItemName | LinkTable.ID | (至)Item.ItemName

我尝试了以下 SQL,但它抱怨 Item 第二次出现,并在下面的表达式 "Item LEFT JOIN LinkTable" 中显示消息 "Can't repeat table name "Item" in the FROM clause" :

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

问题 1: 为什么我不能像这样 link 返回到 "starting table" 而不会导致错误消息?

问题 2: 我应该如何定义 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;

您可以为 table 名称起别名。例如,这会将 table Item 别名为别名 i1:

FROM   Item i1

您现在可以再次使用相同的 table 并使用不同的别名来识别它。将此与括号 Access requires for multiple join 结合,您将得到:

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