Я полагаю, что следующее демонстрирует, что Да Вы можете: -
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;
Это: -
- Удаляет таблицы, если они существуют, что позволяет их повторно запускать ( упрощает модификации, если необходимо ).
- имена столбцов имя и онемение были приняты, поскольку им не было дано .
- Создает 3 таблицы ( имена таблиц примечаний, используемые для демонстрации: ta, tb и tc )
- Добавляет некоторые данные ( обратите внимание, что были добавлены дополнительные строки, чтобы показать, как отличить (по крайней мере, от моды) )
- Обновляет столбец numb таблицы A (ta), где столбец имени имеет значение JAMES в соответствии с суммой столбца numb из всех строк с одинаковым именем (JAMES) ) из таблицы tb минус сумма нечувствительного столбца из всех строк с одинаковым именем (JAMES) из таблицы tc
- Возможно, это не совсем то, что вам нужно, поэтому предполагается, что вы хотите суммировать все строки с одинаковыми именами в таблице (ta и tc)
- Запрашивает все таблицы (первая показана ниже, так как это таблица, которая была обновлена.)
Первый результат, показывающий, что строка была обновлена с нуля до 3 (5 - 2) и что строка для Мэри осталась такой, какой она была: -
Следующее изменение в ОБНОВЛЕНИИ получает имя (вместо жесткого кодирования 'JAMES' несколько раз, согласно извлеченным строкам из таблицы ta, использование жестко закодированных имен, возможно, делает его проще понять работу 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 не будет связанной строки (то есть с одинаковым именем), то результат будет нулевым (независимо от того, используется ли сумма).