首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以通过在SQLite中添加其他两个表中的值来更新表

是否可以通过在SQLite中添加其他两个表中的值来更新表
EN

Stack Overflow用户
提问于 2019-03-24 19:24:34
回答 3查看 92关注 0票数 0

我正在试用SQLite,遇到了一个问题。有3个表A、B和C。我想使用B和C的和来更新表A。

表A. James null。

表B。詹姆斯5.

表C詹姆斯2

因此,通过更新,我希望表A具有

詹姆斯3. (5-2)

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-03-24 20:07:13

SQLite不支持UPDATE语句中的联接,因此您可以通过直接访问表AB的相应行来实现,如下所示:

代码语言:javascript
复制
update A 
set value = 
  (select value from B where name = A.name) -
  (select value from C where name = A.name)

如果只想用name = 'James'更新行,则添加:

代码语言:javascript
复制
where name = 'James'

请参阅demo

票数 1
EN

Stack Overflow用户

发布于 2019-03-24 20:00:57

适用于每个数据库:

代码语言:javascript
复制
UPDATE 
  "A" 
SET
  "x" = 
    (
      SELECT
        SUM("x")
      FROM "B"
        WHERE "B"."id"="A"."id"
    ) +
    (
      SELECT
        SUM("x")
      FROM "C"
        WHERE "C"."id"="A"."id"
    )
票数 0
EN

Stack Overflow用户

发布于 2019-03-24 20:04:14

我相信下面的例子说明了Yes你可以做到:

代码语言:javascript
复制
DROP TABLE IF EXISTS ta;
DROP TABLE IF EXISTS tb;
DROP TABLE IF EXISTS tc;
CREATE TABLE IF NOT EXISTS ta (name TEXT, numb INTEGER);
CREATE TABLE IF NOT EXISTS tb (name TEXT, numb INTEGER);
CREATE TABLE IF NOT EXISTS tc (name TEXT, numb INTEGER);
INSERT INTO ta VALUES ('JAMES',null),('Mary',100);
INSERT INTO tb VALUES ('JAMES',5),('Sue',33);
INSERT INTO tc VALUES ('JAMES',2),('Anne',45);

UPDATE ta SET numb = 
    (SELECT sum(numb) FROM tb WHERE name = 'JAMES') 
    - 
    (SELECT sum(numb) FROM tc WHERE name = 'JAMES') 
WHERE name = 'JAMES';

SELECT * FROM ta;
SELECT * FROM tb;
SELECT * FROM tc;

这是:

如果表存在,

  • 会删除它们,允许重新运行(如果需要,可以简化修改)。假设
    • 列名namenumb不是given.

  • 创建这3个表(注意,用于演示的表名是ta,tb和tc )
  • 添加了一些数据(请注意,添加附加行是为了说明如何区分(至少对于表A (ta)的fashion))
  • Updates列和numb ,其中name列的值为JAMES,根据表tb中具有相同名称(JAMES)的所有行的数字列减去表tc
    • 中具有相同名称(JAMES)的所有行的数字列的总和,这可能不是您想要的,因此它假定您我想对每个表中具有相同名称的所有行求和(ta和tc)

  • 查询所有表(第一个表如下所示,因为这是已更新的表。)

第一个结果显示行已从null更新为3 (5 - 2),并且Mary的行保持不变:-

以下对更新的更改将获取名称(而不是根据从ta表中提取的行,多次硬编码'JAMES‘,使用硬编码的名称可能更容易理解SQL的工作原理)。

代码语言:javascript
复制
UPDATE ta SET numb = (SELECT sum(numb) FROM tb WHERE name = ta.name) - (SELECT sum(numb) FROM tc WHERE name = ta.name) WHERE name = 'JAMES';

注意,如果tb或tc中没有相关联的行(即同名),则结果将为null (无论是否使用sum )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55323278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档