2014-09-13 41 views
0

我有3個表格,即A,B & c。在Parent上運行查詢以顯示只有一個子表的記錄

乙& C有A.

現在我想運行上的一個查詢,以這樣的方式的關鍵forign,只返回B的記錄。

也就是說,我要排除所有C的結果,並顯示B的結果僅,當A.

希望的所有記錄執行查詢時,我有這個問題是有道理的。

+0

只需將您想要查看的屬性放在select中即可。例如,'SELECT B.foo,B.bar FROM A JOIN B ON B.A_id = A.id JOIN C ON C.A_id = A.id WHERE ...' – lurker 2014-09-13 16:19:04

回答

0

如果你想返回從B,則東西左外連接A的所有記錄和任何匹配的記錄是適當的:

SELECT a.*, b.* 
FROM a, b 
WHERE a.id = b.id 

這會從A返回每條記錄,然後從B填充值哪裏有一場比賽。如果B中有多個匹配的行,這也將返回多行記錄發生在A中的記錄。

僅僅因爲在C中有一個引用表A中的某個外鍵,除非在查詢中使用它,否則不會被返回。

如果你只是想從B返回的所有記錄,當外鍵出現在A,那麼也許你想:

SELECT * 
FROM B 
WHERE B.id in (SELECT id FROM A) 
AND B.id not in (SELECT id FROM C) 

SELECT * 
FROM B 
WHERE EXISTS (SELECT 1 FROM A JOIN B on A.id = B.id) 
    AND NOT EXISTS (SELECT 1 FROM C JOIN B on C.id = B.id) 

所有這些假設id是關鍵,其常見。

0

這是你想要的嗎?

select a.* 
from a 
where exists (select 1 from b where b.aid = a.aid) and 
     not exists (select 1 from c where c.aid = c.aid); 
相關問題