[英]Run a query on Parent to show records of only one child table
我有3張桌子,分別是A,B和c。
B&C具有A的外鍵。
現在,我想以一種方式對A運行查詢,以便僅返回B的記錄。
也就是說,當對A的所有記錄執行查詢時,我想排除C的所有結果並僅顯示B的結果。
希望,我的問題很有意義。
這是你想要的嗎?
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);
如果要返回A的所有記錄以及B的所有匹配記錄,則可以使用左外部聯接:
SELECT a.*, b.*
FROM a, b
WHERE a.id = b.id
這將從A
返回每個記錄,並在匹配的情況下從B
填充值。 如果B
中存在多個匹配的行,這還將為A
中出現的記錄返回多行。
僅僅因為C
中有一個外鍵引用了表A
,除非您在查詢中使用它,否則不會返回該外鍵。
如果您只想在外鍵出現在A
時從B
返回所有記錄,那么您可能想要:
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
是通用的密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.