Junction SQL Query返回第一个表

时间:2015-11-07 10:22:52

标签: sql ms-access-2010 junction-table

我有一些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;

1 个答案:

答案 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