使用两个表更新时,我有一个一行的示例,但我必须更新168432行,使用sqlite

使用两个表更新时,我有一个一行的示例,但我必须更新168432行,使用sqlite,sql,sqlite,spatialite,Sql,Sqlite,Spatialite,我想更新sqlite表,下面是更新一行的示例: update tpecroad set tnode = (SELECT b.nodeid FROM "TPECRoad" as a join tpecnode as b where pointn(a.geometry,numpoints(a.geometry)) = b.geometry and a.pk =1) where pk=1 但有168432行需要更新,有没有更快的方法来更新大量数据 这就像改变了a.pk=1~168432和pk=1

我想更新sqlite表,下面是更新一行的示例:

update tpecroad set tnode = (SELECT  b.nodeid FROM "TPECRoad" as a
join tpecnode as b 
where pointn(a.geometry,numpoints(a.geometry)) = b.geometry and a.pk =1)
where pk=1
但有168432行需要更新,有没有更快的方法来更新大量数据

这就像改变了a.pk=1~168432和pk=1~168432

非常感谢

试试这个:

update tpecroad as c
set tnode = ( SELECT  b.nodeid 
              FROM "TPECRoad" as a join tpecnode as b 
              where pointn(a.geometry,numpoints(a.geometry)) = b.geometry and a.pk = c.pk);
Update tpecroad a
set tnode = (SELECT b.nodeid 
FROM tpecnode as b 
where pointn(tpecroad.geometry,numpoints(tpecroad.geometry)) = b.geometry)

如果我理解正确,此查询可能有助于:

update tpecroad a set tnode = (
    select b.nodeid from tpecnode b
    where pointn(a.geometry,numpoints(a.geometry)) = b.geometry
)
where exists (
    select 1 from tpecnode b
    where pointn(a.geometry,numpoints(a.geometry)) = b.geometry
);
编辑:如果a.pk=b.pk必须验证才能执行更新,则查询如下所示:

update tpecroad a set tnode = (
    select b.nodeid from tpecnode b
    where pointn(a.geometry,numpoints(a.geometry)) = b.geometry
        and a.pk = b.pk
)
where exists (
    select 1 from tpecnode b
    where pointn(a.geometry,numpoints(a.geometry)) = b.geometry
        and a.pk = b.pk
);

你是说你想更新pk介于1和168432之间的记录,即所有记录?如果是这样的话,只需删除pk=1I的两个实例,这意味着,愚蠢的函数是make 168432 querys,并且只更改了(a.pk=2 pk=2)。。3.4.5…您实际使用什么代码来尝试更新所有记录?更新tpecroad set tnode=(从“tpecroad”中选择b.nodeid作为连接tpecnode as b,其中pointn(a.geometry,numpoints(a.geometry))=b.geometry)//但是所有行数据在查询中都是相同的插入'as',您能再次检查吗?它得到了相同的错误,它正在运行,但表的内容不是答案。我认为括号中的查询不能像tpecroad那样触及外部。@user3513254我已经更新了答案,我没有意识到这是sqlite,但问题是。sqlite不能使用“update tpecroad a set tnode”和“update tpecroad as set tnode”