使用另一个不相关的表中的数据更新表

时间:2018-12-09 14:21:41

标签: sql oracle

我有三个表A,B和C。 A和B连接了外键A.category_id = B.id, A和C的行数相同。

A

id  category_id value1 value2
1   null        'A'     null
2   null        'B'     null
3   null        'C'     null
4   null        'D'     null

B

id  category
1   0
2   1

C

id category
1  0
2  1
3  1
4  0 

预期结果:

A

id  value
1   1
2   2
3   2
4   1

我想接收更新的A表,其中category_id将基于表C类别来自表B。

我尝试过

UPDATE A SET
A.category_id = (
select B.id from  A
    left JOIN  C
      ON A.id = C.id 
    left join  B  on B.category=C.category
    )
WHERE A.id IN (SELECT C FROM C  WHERE A.id = C.id);

但是随后我收到了ORA-01427单行子查询返回了多行提示

1 个答案:

答案 0 :(得分:0)

您在子查询中缺少相关子句:

update A
    set category_id = (select B.id
                       from C join
                            B
                            on B.category = C.category
                       where A.id = C.id
                      )
where exists (select 1 from C where A.id = C.id);

要关联查询,通常在where条件下引用外部引用。您无需在from子句中重复表引用。

请注意,不需要外部联接。如果不匹配,则值为NULL