选择计数(*)或零

Mar*_*kis 3 sql oracle plsql

疲倦阻止我找到这个...说你有以下表格:

  • PARENT_ID(长)

儿童

  • CHILD_ID(长)
  • PARENT_ID(长,FK)
  • HAS_GRADUATED(BOOLEAN)

我想要一个查询返回以下true(1,在Oracle的情况下)如果父项至少有一个已经毕业的子项,并且(如果是Oracle则为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的父母要么根本没有孩子,要么有孩子,但没有孩子毕业.

对此的查询是什么样的?

OMG*_*ies 7

使用:

   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
Run Code Online (Sandbox Code Playgroud)

您必须使用外部联接才能查看子表中没有支持记录的父值.