1

我在 sqlite 中有 3 个表,第一个是关于我称之为 bar 的实体:

bar
    *id
    -name

另一个保持两个条之间的关系,我称这种关系为 foo:

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

baz 拥有一个属性,该属性限定了 foo 表示的 KIND 关系:

baz
    *id
    -description

我需要显示一个 foo 查询,它将外键替换为 bar an baz 的值,例如:

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

如您所见,我不是数据库专家,我尝试过加入,它适用于 foo 和 baz。

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

但是用这种方式展示bar的两个成员对我来说很难。一些忠告?

4

1 回答 1

4

假设 table foo: bar_one (fk->bar), bar_two (fk->bar),baz的列是非空列,您可以使用INNER JOIN组合两个表,但如果它们可以为,请LEFT 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只显示记录在每个表定义上至少有一个匹配的行,而在左侧LEFT JOIN显示所有行定义是否匹配或没有。

于 2012-10-20T22:18:43.020 回答