【发布时间】:2013-03-01 02:08:38
【问题描述】:
我正在构建一个包含标记的数据库,并使用“毒”模式,其中我有 3 个表:
Items: Item, ItemID, more fields
Tags: TagName, TagID, more fields
TagMap: TagID, ItemID
我正在尝试构建一个查询来列出所有项目及其标签,其中许多项目可能没有标签。我找不到可以同时执行这两种操作的查询。
以下查询按名称获取带有标签的项目,但只会提取具有 标签的项目。
SELECT Items.Item, Tags.Tag
FROM Items INNER JOIN
(Tags INNER JOIN TagMap ON Tags.ID = TagMap.TagId)
ON Items.ID = TagMap.ItemId;
如果已标记,以下查询会为我获取所有项目及其 TagID,但我似乎无法在单个查询中将这些 TagID 转换为 TagNames 的下一步。
SELECT [Items].Item, [TagMap].TagId
FROM Items LEFT JOIN TagMap ON [Items].ID=TagMap.ItemId;
MSDN 说“外部联接可以嵌套在多表联接中的内部联接中,但内部联接不能嵌套在外部联接中”,但我找不到任何嵌套两个联接的方法抛出错误。据我所知,我需要 LEFT JOIN 才能出现在 Items 上。
我在 Access 中工作以在概念数据库上构建我的证明,因为它已经安装在我的机器上。我可能会在某个时候切换到 SQL Server。
【问题讨论】: