我也有一个关于如何加入我的数据库表的问题。我的数据设置如下:
MainTable
main_id x y z
1 l m n
2 o p q
SubTableA
main_id extra_id foo bar
1 a 1 4
1 b 2 h
1 c 1 g
2 a k er
2 b k 34
2 c l f
SubTableB
main_id extra_id a b c
1 a v r j
1 c w r k
2 c x h l
SubTableC
main_id extra_id mono stereo
2 c n null
2 d z y
我正在尝试实现以下结果:
main_id x y z extra_id foo bar a b c mono stereo
1 l m n a 1 4 v r j null null
1 l m n b 2 h null null
1 l m n c 1 g w r k null null
2 o p q a k er null null
2 o p q b k 34 null null
2 o p q c l f x h l n null
2 o p q d z y
为了增加趣味,有时extra_id
is null 或其中一个子表不包含main_id
,但我希望其他表被连接并为未找到的值填充空值。
在那种情况下,我希望结果是:
main_id x y z extra_id foo bar a b c null null
例如。
我尝试使用如何使用 ID 连接多个 SQL 表?作为模板,但无法一路获得。
这是我到目前为止所尝试的:
SELECT
m.*,
a.*,
b.*,
c.*,
FROM
MainTable m,
SubTableA a,
SubTableB b,
SubTableC c,
WHERE
m.main_id = a.main_id(+)
AND a.main_id=b.main_id(+)
AND a.extra_id=b.extra_id(+)
AND a.main_id = c.main_id(+)
AND a.extra_id = c.extra_id(+);
编辑:
我想要主表中的所有行。当它们与 main_id 上的子表匹配时,为每个 extra_id 加入它们(每个 main_id 可以多于一个)。如果 main_id 和 extra_id 的组合存在于多个子表中,我希望它们被加入。再在笔记本电脑前会给出更详细的例子。
谢谢,
克里斯蒂安