2014-01-29 83 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