交汇点 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:FromItem
和ToItem
引用'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
我有一些 MS Access 2010 link tables
link 回到第一个 table,像这样:
Item LinkTable
[ ID ] [ ID ]
[ ItemName ]-1-------*-[ FromItem ]
[ ]-1-------*-[ ToItem ]
图1:FromItem
和ToItem
引用'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