sqlite:使用来自其他两个表列的cat的列更新表列
可能是一个微不足道的问题,我查阅了各种档案,但找不到自己的路 我的情况的简化示例 我得到了一个表t,其中有一列我想用另外两个表u和v列I的值来更新。为了实现这一点,我使用了这样的中间表xsqlite:使用来自其他两个表列的cat的列更新表列,sqlite,sql-update,Sqlite,Sql Update,可能是一个微不足道的问题,我查阅了各种档案,但找不到自己的路 我的情况的简化示例 我得到了一个表t,其中有一列我想用另外两个表u和v列I的值来更新。为了实现这一点,我使用了这样的中间表x create table t (i integer); create table u (i integer); create table v (i integer); insert into t values (11); insert into t values (12); insert into t val
create table t (i integer);
create table u (i integer);
create table v (i integer);
insert into t values (11);
insert into t values (12);
insert into t values (13);
insert into t values (14);
insert into u values (21);
insert into u values (22);
insert into v values (31);
insert into v values (32);
create table x as select * from u union all select * from v;
select rowid,* from x
rowid i
----- --
1 21
2 22
3 31
4 32
update t set i=(select * from x where rowid=t.rowid );
select rowid,* from t;
rowid i
----- --
1 21
2 22
3 31
4 32
碰巧我知道cardt=cardu+carv。我试图摆脱这个中间的x表
我将t重置为11,12,13,14,然后
update t set i=(select * from u union all select * from v)
where rowid=t.rowid;
select rowid,* from t"
rowid i
----- --
1 21
2 21
3 21
4 21
哎哟,我用select而不是update进行了双重检查
select rowid,* from (select * from u union all select * from v)"
rowid i
----- --
21
22
31
32
没有子选择的rowid。另一方面,我知道如何生成序列号
with recursive s as
(select 1 as n union all select n+1 from s where n<4)
select n from s;
n
-----
1
2
3
4
但是我不知道如何结合这些东西来实现我可以对x表做的事情,这是可行的吗?假设rowid值中没有间隙,您可以通过将适当的偏移量添加到第二个表的值来构建序列:
> SELECT rowid, i FROM u
UNION ALL
SELECT rowid + (SELECT COUNT(*) FROM u), i FROM v;
rowid i
----- --
1 21
2 22
3 31
4 32
然后,您可以将其用作更新的源:
WITH x(rowid, i) AS (
...
)
UPDATE t
SET i = (SELECT i FROM x
WHERE rowid = t.rowid);
是的,rowid中没有间隙,基数也是同步的,我可以用两个以上的表导出您的示例。很 完美: