我有一些MS Access 2010 link tables
链接回第一个表,如下所示:
Item LinkTable
[ ID ] [ ID ]
[ ItemName ]-1-------*-[ FromItem ]
[ ]-1-------*-[ ToItem ]
图1: FromItem
和 ToItem
引用&#39; Item.ID&#39; < /强> 的
我想创建一个查询,将所有三个表链接在一起并显示例如以下字段
(from) Item.ItemName | LinkTable.ID | (至)的 Item.ItemName
我已经尝试了以下SQL,但它抱怨Item的第二次出现,带有消息&#34;不能重复表名&#34; Item&#34;在FROM子句&#34;在表达式&#34;项目LEFT JOIN LinkTable&#34;下面:
SELECT *
FROM Item LEFT JOIN
(
Item LEFT JOIN LinkTable ON (LinkTable.ToItem =Item.ID)
)
ON (LinkTable.FromItem = Item.ID);
Q1:为什么我无法链接回&#34;起始表&#34;像这样没有导致错误信息?
Q2:如何定义“选择”字段以显示from-ItemName和to-ItemName而不会混淆它们? (在我编写的示例中&#34;选择*&#34;以简化)
// Rolf
修改:______________________________________________________
基于@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;
答案 0 :(得分:2)
您可以为表名添加别名。例如,这会将表Item
别名为别名i1
:
FROM Item i1
现在,您可以再次使用同一个表,并使用其他别名来识别它。将它与括号组合Access需要多个连接,您得到:
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