我正在试用SQLite,遇到了一个问题。有3个表A、B和C。我想使用B和C的和来更新表A。
表A. James null。
表B。詹姆斯5.
表C詹姆斯2
因此,通过更新,我希望表A具有
詹姆斯3. (5-2)
谢谢
发布于 2019-03-24 20:07:13
SQLite不支持UPDATE语句中的联接,因此您可以通过直接访问表A和B的相应行来实现,如下所示:
update A
set value =
(select value from B where name = A.name) -
(select value from C where name = A.name)如果只想用name = 'James'更新行,则添加:
where name = 'James'请参阅demo
发布于 2019-03-24 20:00:57
适用于每个数据库:
UPDATE
"A"
SET
"x" =
(
SELECT
SUM("x")
FROM "B"
WHERE "B"."id"="A"."id"
) +
(
SELECT
SUM("x")
FROM "C"
WHERE "C"."id"="A"."id"
)发布于 2019-03-24 20:04:14
我相信下面的例子说明了Yes你可以做到:
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;这是:
如果表存在,
第一个结果显示行已从null更新为3 (5 - 2),并且Mary的行保持不变:-

以下对更新的更改将获取名称(而不是根据从ta表中提取的行,多次硬编码'JAMES‘,使用硬编码的名称可能更容易理解SQL的工作原理)。
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 )。
https://stackoverflow.com/questions/55323278
复制相似问题