SQL查询来自同一个表的两个项之间的关系

时间:2012-10-20 22:16:18

标签: sql sqlite

我在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和baz的值替换外键,例如:

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;

但是以这种方式向我展示酒吧的两名成员是很困难的。一些建议?

1 个答案:

答案 0 :(得分:4)

假设表foobar_one (fk->bar)bar_two (fk->bar)baz的列是非null 列,您可以使用{{1组合两个表,但如果它们是可以为空的,请改用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显示左侧定义的所有行是否存在是匹配还是没有。