首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择计数(*)或零

选择计数(*)或零
EN

Stack Overflow用户
提问于 2010-07-26 17:32:01
回答 5查看 2K关注 0票数 3

疲倦使我找不到这个..。假设您有以下表格:

亲本

  • PARENT_ID (LONG)

儿童

(LONG)

  • PARENT_ID (LONG,FK)

  • HAS_GRADUATED (布尔)

)

如果父级至少有一个已毕业的子级,则返回以下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的父母要么根本没有孩子,要么有孩子,但他们都没有毕业。

对此的查询是什么样子的?

EN

回答 5

Stack Overflow用户

发布于 2010-07-26 17:41:51

使用:

代码语言:javascript
复制
   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

您必须使用外部联接来查看在子表中没有支持记录的父值。

票数 7
EN

Stack Overflow用户

发布于 2010-07-26 17:40:19

这能满足你的期望吗?

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2010-07-26 18:03:32

OMG小马解决方案可能会表现得更好(这就是为什么他得到了我的+1),但这是解决问题的另一种方法。

代码语言:javascript
复制
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 Parent
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3337351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档