gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:33:05 24 4
gpt4 key购买 nike

可能是一个微不足道的问题,我查看了各种文件但找不到我的方式。

我的情况的简化示例。

我有一个表 t,其中有一列我想用来自其他 2 个表 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

碰巧我知道card(t)=card(u)+car(v)。我试图摆脱这个中间 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 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);

关于sqlite:使用来自其他 2 个表列的 cat 列更新表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com