我正在尝试SQLite并遇到问题。有3个表A,B和C。 我想使用B和C的总和来更新表A。
表A. 詹姆斯为空。
表B. 詹姆斯5。
表C 詹姆斯2
因此,通过更新,我希望表A具有
詹姆斯3.(5-2)
谢谢
答案 0 :(得分:1)
我相信以下内容表明是,您可以:-
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的行保持不变:-
对UPDATE进行的以下更改将获得名称(而不是按照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)。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
在每个数据库中工作:
UPDATE
"A"
SET
"x" =
(
SELECT
SUM("x")
FROM "B"
WHERE "B"."id"="A"."id"
) +
(
SELECT
SUM("x")
FROM "C"
WHERE "C"."id"="A"."id"
)