我有三个表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单行子查询返回了多行提示
答案 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
。