将SQL查询返回到第一个表
我有一些MS Access 2010将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
链接表
,可以链接回第一个表,如下所示:
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