sqlite:使用来自其他两个表列的cat的列更新表列

sqlite:使用来自其他两个表列的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

可能是一个微不足道的问题,我查阅了各种档案,但找不到自己的路

我的情况的简化示例

我得到了一个表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 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中没有间隙,基数也是同步的,我可以用两个以上的表导出您的示例。很 完美: