sqlite用自己更新一列

时间:2016-03-23 15:14:35

标签: sqlite sql-update

我有一张这样的表

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

2 个答案:

答案 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,但却消耗了一些周期:)

干杯,披?