2014-01-29 139 views
0

我有三个表ABCSQL多表连接

A 
--------- 
a_pk | id 

B 
---------------------- 
b_pk | id | link | foo 

C 
---------------------- 
c_pk | id | link | bar 

B所有记录在A匹配的记录; C中的所有记录在A中有匹配记录,但BC中的记录不一定必须彼此匹配。我想要得到的结果集,其中A有一个匹配的B或C.独立,查询将是:

SELECT A.id, B.foo FROM A INNER JOIN B ON A.id = B.id 
SELECT A.id, C.bar FROM A INNER JOIN C ON A.id = C.id 
SELECT B.foo, C.bar FROM B FULL JOIN C ON B.id = C.id AND B.link = C.link 

我需要填补,以使这项工作?

SELECT A.id, B.foo, C.bar FROM <join A, B, C> 

我使用的是Oracle,如果它的确与众不同,我宁愿避免使用子查询,如果可能的。

[编辑 - 澄清]

我想的从A具有在任何BC匹配记录。

+0

如果你想加入3个表,你只需要2连接,而不是3 – jcho360

+0

我是知道的,我把3个查询以显示表格之间的关系。 – asgallant

回答

0

听起来像你需要一个左连接。 (我不是很熟悉Oracle,但我认为这应该工作。)

SELECT A.id, B.foo, C.bar 
FROM A 
LEFT OUTER JOIN B on A.id = B.id 
LEFT OUTER JOIN C on A.id = C.id 
WHERE B.id IS NOT NULL OR C.id IS NOT NULL 
+0

不,这会给我A记录没有与B或C匹配的记录。 – asgallant

+0

给出的WHERE条件过滤出A中没有B或C匹配的所有记录。 – Hellion