疲倦使我找不到这个..。假设您有以下表格:
亲本
儿童
(LONG)
)
如果父级至少有一个已毕业的子级,则返回以下true (在甲骨文中为1);如果父级没有已毕业的子级,则返回false (如果为,则为0);如果父级没有已毕业的子级,则返回或在中完全没有子级。
PARENT_ID................HAS_CHILDREN_WHO_GRADUATED
5.1
3.1
6.0
2.0
在上述情况下,有parent_id=5的父母可能会有已经毕业的>=1子女。parent_id=3的父母也是这样。parent_id=6的父母要么根本没有孩子,要么有孩子,但他们都没有毕业。
对此的查询是什么样子的?
发布于 2010-07-26 17:41:51
使用:
SELECT DISTINCT
p.parent_id,
CASE WHEN c.parent_id IS NULL THEN 0 ELSE 1 END
FROM PARENT p
LEFT JOIN CHILD c ON c.parent_id = p.parent_id
AND c.has_graduated = 1您必须使用外部联接来查看在子表中没有支持记录的父值。
发布于 2010-07-26 17:40:19
这能满足你的期望吗?
SELECT
P.Parent_Id,
CASE WHEN (SUM (CASE WHEN Has_Graduated = 1 then 1 else 0 END)) = 0 THEN 0 ELSE 1 as HAS_CHILDREN_WHO_GRADUATED
FROM Parent P
LEFT JOIN Child C
ON P.Parent_Id = C.Parent_Id
GROUP BY P.Parent_Id发布于 2010-07-26 18:03:32
OMG小马解决方案可能会表现得更好(这就是为什么他得到了我的+1),但这是解决问题的另一种方法。
Select Parent_Id
, Case
When Exists( Select 1
From Child
Where Child.Parent_Id = Parent.Parent_Id
And Child.Has_Graduated = 1 ) Then 1
Else 0
End
From Parenthttps://stackoverflow.com/questions/3337351
复制相似问题