我有3個表格,即A,B & c。在Parent上運行查詢以顯示只有一個子表的記錄
乙& C有A.
現在我想運行上的一個查詢,以這樣的方式的關鍵forign,只返回B的記錄。
也就是說,我要排除所有C的結果,並顯示B的結果僅,當A.
希望的所有記錄執行查詢時,我有這個問題是有道理的。
我有3個表格,即A,B & c。在Parent上運行查詢以顯示只有一個子表的記錄
乙& C有A.
現在我想運行上的一個查詢,以這樣的方式的關鍵forign,只返回B的記錄。
也就是說,我要排除所有C的結果,並顯示B的結果僅,當A.
希望的所有記錄執行查詢時,我有這個問題是有道理的。
如果你想返回從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
是關鍵,其常見。
這是你想要的嗎?
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);
只需將您想要查看的屬性放在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