我有一些link tables
链接到第一个表的MS Access 2010 ,如下所示:
Item LinkTable
[ ID ] [ ID ]
[ ItemName ]-1-------*-[ FromItem ]
[ ]-1-------*-[ ToItem ]
图1:FromItem
并ToItem
引用“ Item.ID”
我想查询将所有三个表链接在一起并显示例如以下字段的查询
(来自)Item.ItemName | LinkTable.ID | (至)Item.ItemName
我尝试了以下SQL,但是它抱怨Item的第二次出现,并在下面的表达式“ Item LEFT JOIN LinkTable”中显示一条消息“无法在FROM子句中重复表名称” Item”:
SELECT *
FROM Item LEFT JOIN
(
Item LEFT JOIN LinkTable ON (LinkTable.ToItem =Item.ID)
)
ON (LinkTable.FromItem = Item.ID);
Q1:为什么我不能这样链接回“启动表”而不引起错误消息?
Q2:我应该如何定义选择字段,以便同时显示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;
您可以为表名加上别名。例如,这将表别名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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句