首页 > 解决方案 > 查询所有孩子都具有一定价值的父母

问题描述

我有 2 个表,PARENT 和 CHILD,其中 CHILD 有来自 PARENT 的 fk。

家长

p_id|name|address
1   |Aaaa|AddressA
2   |Bbbb|AddressB
3   |Cccc|AddressC

孩子

c_id|name|category|p_id
11  |Zzzz|Test1   |1
12  |Yyyy|Test2   |1
13  |Xyxy|Test1   |1
14  |Wwww|Test1   |2
15  |Vvvv|Test1   |2
16  |Uuuu|Test1   |2
17  |Tttt|Test2   |3
18  |Ssss|Test3   |3
19  |Rrrr|Test2   |3
20  |Qqqq|Test2   |3

我正在尝试使用此查询获取所有 CHILD.category = 'Test1' 的 PARENT

select distinct p.* from PARENT p join CHILD c
    on p.p_id = c.p_id
    where c.category = 'Test1';

预期的结果,因为 p_id 为 2 的所有 CHILD 都具有值为“Test1”的类别:

p_id|name|address
2   |Bbbb|AddressB

但我得到了这个,因为它返回了 CHILD 的类别 = 'Test1' 的 PARENT:

p_id|name|address
1   |Aaaa|AddressA
2   |Bbbb|AddressB

谁能帮忙指出我哪里做错了?

标签: sqloracle

解决方案


您可以使用 CTE 首先仅获取这些子 ID,Test1然后将其与父级连接。

WITH c 
     AS (SELECT p_id 
         FROM   child 
         GROUP  BY p_id 
         HAVING MAX(category) = MIN(category) 
                AND MAX(category) = 'Test1') 
SELECT p.* 
FROM   parent p 
       JOIN c 
         ON p.p_id = c.p_id; 

演示


推荐阅读