基于外连接结果集更新sql

时间:2017-04-03 21:16:49

标签: sql oracle sql-update outer-join

不知道从哪里开始。我需要根据Oracle中外连接和子表的查询集更新单个记录。我在MS Access中起草了一个模拟模型来帮助说明这种情况,但这是一个Oracle开发。

目标:更新'家长'表基于其结果集的子记录没有程序。我本来只是做了一个逻辑程序,但要求是做纯SQL。

表格结构: enter image description here

我需要根据Child.Status将Parent.Result设置为Y / N. 条件:如果有任何Child.Status = Null OR' N'然后Parent.Result =' N'。换句话说,Parent.Result =' Y'的唯一条件。如果所有Child.Status =' Y'。

以下是显示预期结果的示例数据集。 enter image description here

我尝试了几种方法,例如计算子结果=' Y',案例陈述和其他失败。我有点坚持如何创建子查询来获得结果。

感谢任何帮助或指导! 感谢

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容。请注意,这只是一次性更新:

UPDATE parent p
   SET p.result = (
    CASE WHEN EXISTS (
        SELECT 1 FROM join j INNER JOIN child c
            ON j.child_fk = c.child_pk
         WHERE j.parent_fk = p.parent_pk
           AND ( c.status IS NULL OR c.status = 'N' ) )
    ) THEN 'N' ELSE 'Y' END;

如果没有孩子,您不会提及父母的结果是Y。以上假定它会是。