我在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;
但是以这种方式向我展示酒吧的两名成员是很困难的。一些建议?
答案 0 :(得分:4)
假设表foo
:bar_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
显示左侧定义的所有行是否存在是匹配还是没有。