UPDATE T1
INNER JOIN
(
SELECT
`month`,
`year`,
SUM(amount) totalAmount
FROM T2
GROUP BY `month`,`year` ) t
ON t.`month` = T1.`month` AND t.`year` = T1.`year`
SET T1.amount = T1.amount - t.totalAmount;
SQL FIDDLE
Объяснение:
Внутренний запрос будет суммировать суммы за каждый (месяц, год) пары.
Внутренний запрос:
SELECT
`month`,
`year`,
SUM(amount) totalAmount
FROM T2
GROUP BY `month`,`year`
Для данных образцов она возвращает результат, как показано ниже:
Я назвал его t
стол
month year totalAmount
10 2015 500
11 2015 200
Теперь, если вы присоединиться к этой t
таблицу с T1 таблица НА month
и year
, что означает строку из двух таблиц будет объединен только если T1.month equals t.month
and T1.year equals t.year
И только тогда вы будете обновлять соответствующее количество строки T1 таблицы, как показано ниже:
T1.amount = T1.amount - t.totalAmount
Таким образом, после этого обновления вашего T1 table
должен выглядеть как показано ниже:
SELECT
*
FROM T1
Результат:
month year amount
10 2015 4500
11 2015 3800
Редактировать: Вы отметили вопрос MySQL
, пока ожидаете, что запрос будет работать в SqlLite. SQLlite doesn't support JOIN in Update statements.
Sqllite запрос:
UPDATE T1
SET T1.amount = T1.amount - (
SELECT
SUM(T2.amount)
FROM
T2
WHERE
T1.`month` = T2.`month`
AND T1.`year` = T2.`year`
);
Ребята, эти решения работали на SQL, когда я пытался в онлайн-инструментов тестирования, но оба приведенных ниже решений не работают на андроид SQLite, это дает ошибку синтаксиса в «AS» и " INNER ", PLS help – user3796596