我有一张这样的表
a b c
-- -- --
1 1 10
2 1 0
3 1 0
4 4 20
5 4 0
6 4 0
b栏'点'如果a是父母,有点像是' a' c是计算的。现在我需要将父c值传播给他们的孩子。
结果将是
a b c
-- -- --
1 1 10
2 1 10
3 1 10
4 4 20
5 4 20
6 4 20
我无法制作可行的UPDATE / SELECT组合
到目前为止,我得到了一个SELECT,它推动了c列,我希望得到
select t1.c from t t1 join t t2 on t1.a=t2.b;
c
----------
10
10
10
20
20
20
但我不知道怎么把它塞进c
提前完成 干杯,phi
答案 0 :(得分:1)
您必须使用correlated subquery
查找值UPDATE t
SET c = (SELECT c
FROM t AS parent
WHERE parent.a = t.b)
WHERE c = 0;
答案 1 :(得分:0)
我最终找到了一种方法来复制我最初的' temp' SELECT JOIN to table' t'。像这样的东西
create temp table u as select t1.c from t t1 join t t2 on t1.a=t2.b;
update t set c=(select * from u where rowid=t.rowid);
我想知道2个解决方案,你的1个查询UPDATE是如何相关的SELECT,而我的是2个查询和1个相关查询,每个都比较。我看起来似乎更重,更不美观,但对于perf我不知道。
在Algo方面,你的注意不要复制父数据,只复制子数据,复制自己的父数据,但这是一个nop,但却消耗了一些周期:)
干杯,披?