sql - 查询所有孩子都具有一定价值的父母
问题描述
我有 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
谁能帮忙指出我哪里做错了?
解决方案
您可以使用 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;
推荐阅读
- java - 测试 1(代码强制)的运行时错误,但在 netbeans 中有效
- c# - 如何显示 Windows 窗体后面的内容?
- javascript - 两个运动物体的交集
- regex - 如何从句子中提取时间并转换为数字?
- javascript - JS 如何评估表达式 ({...}).objMethod()?
- mysql - 为什么“SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;”的结果 是 1?
- javascript - 如何修复“加载页面时打开的侧边栏”?
- c# - 如何从 Listbox.SelectedItem 获取数据源的不同成员
- python-3.x - 在 gpu 上编译并使用 opencv 使用 python 进行图像处理
- scala - 请帮忙解释一个Scala构造函数和伴生对象的案例