根据外连接结果集更新 sql

update sql based on outer join result set

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

目标:根据其子记录的结果集更新'Parent'table,无需过程。我本来只是做了一个合乎逻辑的程序,但是需求是做纯SQL.

Table 结构:

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

这是一个示例数据集,用于显示预期结果。

我尝试了几种方法,比如计算子结果 = 'Y'、case 语句和其他失败。我有点卡在如何创建子查询以获得结果上。

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

您可以尝试如下操作。请注意,这只是一个 one-time 更新:

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;

你不提如果没有children,parent的结果是否可以Y。以上假设是。