簡體   English   中英

在父項上運行查詢以僅顯示一個子表的記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM