首页 文章

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

提问于
浏览
1

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

一个

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

id  category
1   0
2   1

C

id category
1  0
2  1
3  1
4  0

预期结果:

一个

id  value
1   1
2   2
3   2
4   1

我想收到更新的A表,其中category_id将根据表C类别从表B中获取id .

我试过了

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

    您缺少子查询中的关联子句:

    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 .

相关问题