1

私は sqlite に 3 つのテーブルを持っています。最初のテーブルは、私が bar と呼ぶエンティティに関するものです。

bar
    *id
    -name

もう 1 つは 2 つのバー間の関係を維持します。この関係を foo と呼びます。

foo
    *id
    -bar_one (fk->bar)
    -bar_two (fk->bar)
    -baz (fk->baz)

baz は、foo が表す KIND 関係を修飾する属性を保持します。

baz
    *id
    -description

次のような、外部キーを bar と baz の値に置き換える foo のクエリを表示する必要があります。

id    bar_one    bar_two    baz
1     bar1       bar2       siblings
2     bar2       bar3       acquaintances
3     bar3       bar4       enemies

ご覧のとおり、私は DB の専門家ではありません。結合を試してみたところ、foo と baz で動作します。

SELECT foo.id, baz.description FROM foo, baz WHERE foo.baz = baz.id;

でも、このように二人のbarのメンバーを見せるのは私には難しいです。いくつかのアドバイス?

4

1 に答える 1

4

footable : bar_one (fk->bar), bar_two (fk->bar),の列baznull 以外の列であると仮定すると、 を使用INNER JOINして両方のテーブルを組み合わせることができますが、 nullableLEFT JOINの場合は代わりに使用してください。

SELECT  a.ID,
        b.name as bar_one,
        c.name AS bar_two,
        d.description
FROM    foo a
        INNER JOIN bar b
            ON a.bar_one = b.id
        INNER JOIN bar c
            ON a.bar_two = c.id
        INNER JOIN baz d
            ON a.baz = c.id

基本的にINNER JOIN、レコードがすべてのテーブル定義で少なくとも 1 つの一致を持つ行のみを表示し、一致するかどうかに関係なく左側LEFT JOINにすべての行を表示します。

于 2012-10-20T22:18:43.020 に答える