0

タグ付けを組み込んだデータベースを構築しており、3つのテーブルがある「toxi」スキーマを使用しています。

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を取得しますが、1つのクエリでそれらのTagIDをTagNamesに変換する次のステップに進むことができないようです。

SELECT [Items].Item, [TagMap].TagId
FROM Items LEFT JOIN TagMap ON [Items].ID=TagMap.ItemId;

MSDNによると、「OUTERJOINはマルチテーブル結合のINNERJOIN内にネストできますが、INNERJOINはOUTERJOIN内にネストできません」とのことですが、エラーをスローしない2つの結合をネストする方法が見つかりません。私が見る限り、私は左の参加がアイテムにある必要があります。

すでにマシンにインストールされているため、Accessでコンセプトデータベースにプルーフを構築しています。おそらくいつかSQLServerに切り替えるでしょう。

4

1 に答える 1

1

あなたは近くにいました-ただ1つ追加する必要がありましたLEFT JOIN

SELECT [Items].Task, [TagMap].TagId, Tags.TagName
FROM Items 
    LEFT JOIN TagMap ON [Items].ID=TagMap.TaskId
    LEFT JOIN Tags ON TagMap.TagID=Tags.TagID

MS Accessを使用しているので、結合の前後に括弧を使用する必要があります。次のようなものを閉じる必要があります。

SELECT [Items].Task, [TagMap].TagId, Tags.TagName
FROM (Items 
    LEFT JOIN TagMap ON [Items].ID=TagMap.TaskId)
    LEFT JOIN Tags ON TagMap.TagID=Tags.TagID
于 2013-03-01T02:10:21.573 に答える