Mysql 基于另一个表的SQL更新表
我有两张桌子 T1(月+年是唯一的) T2 我想更新T1的amount字段,如下所示 T1.amount=T1.amount-(匹配月份、年份的T2金额之和) 所以更新后T1应该是这样的Mysql 基于另一个表的SQL更新表,mysql,Mysql,我有两张桌子 T1(月+年是唯一的) T2 我想更新T1的amount字段,如下所示 T1.amount=T1.amount-(匹配月份、年份的T2金额之和) 所以更新后T1应该是这样的 month year amount 10 2015 4500 11 2015 3800 我不是SQL方面的专家,请推荐SQL来实现上述目标,谢谢 您可以对包含表2每月/年总和的派生表执行更新: UPDATE TABLE1 AS T1 JO
month year amount
10 2015 4500
11 2015 3800
我不是SQL方面的专家,请推荐SQL来实现上述目标,谢谢 您可以对包含
表2
每月/年总和的派生表执行更新
:
UPDATE TABLE1 AS T1
JOIN ( SELECT month, year, SUM(amount) AS amount
FROM TABLE2
GROUP BY month, year) AS T2
ON T1.month = T2.month AND T1.year = T2.year
SET T1.amount = T1.amount - T2.amount;
编辑:
在sqlite中,您必须使用相关子查询来执行更新
:
UPDATE TABLE1
SET amount = amount - (SELECT SUM(amount)
FROM TABLE2
WHERE TABLE1.month = TABLE2.month AND
TABLE1.year = TABLE2.year);
您可以使用
连接对包含表2
每月/年总和的派生表执行更新
:
UPDATE TABLE1 AS T1
JOIN ( SELECT month, year, SUM(amount) AS amount
FROM TABLE2
GROUP BY month, year) AS T2
ON T1.month = T2.month AND T1.year = T2.year
SET T1.amount = T1.amount - T2.amount;
编辑:
在sqlite中,您必须使用相关子查询来执行更新
:
UPDATE TABLE1
SET amount = amount - (SELECT SUM(amount)
FROM TABLE2
WHERE TABLE1.month = TABLE2.month AND
TABLE1.year = TABLE2.year);
说明:
内部查询将汇总每个(月、年)对的金额
内部查询:
SELECT
`month`,
`year`,
SUM(amount) totalAmount
FROM T2
GROUP BY `month`,`year`
对于示例数据,它将返回如下结果:
SELECT
*
FROM T1
我把它命名为t
table
month year totalAmount
10 2015 500
11 2015 200
现在,如果您在month
和year
将此t
表与T1表合并
这意味着只有当T1.month等于t.month
和T1.year等于t.year
和时,两个表中的行才会合并,只有这样,您才会更新T1表行的相应数量,如下所示:
SELECT
*
FROM T1
T1.amount=T1.amount-t.totalAmount
因此,在这次更新之后,您的T1表应该如下所示:
SELECT
*
FROM T1
结果:
month year amount
10 2015 4500
11 2015 3800
编辑:
当您希望查询在SqlLite中工作时,您标记了问题MySQL
。
SQLlite
Sqllite查询:
UPDATE T1
SET T1.amount = T1.amount - (
SELECT
SUM(T2.amount)
FROM
T2
WHERE
T1.`month` = T2.`month`
AND T1.`year` = T2.`year`
);
说明:
内部查询将汇总每个(月、年)对的金额
内部查询:
SELECT
`month`,
`year`,
SUM(amount) totalAmount
FROM T2
GROUP BY `month`,`year`
对于示例数据,它将返回如下结果:
SELECT
*
FROM T1
我把它命名为t
table
month year totalAmount
10 2015 500
11 2015 200
现在,如果您在month
和year
将此t
表与T1表合并
这意味着只有当T1.month等于t.month
和T1.year等于t.year和时,两个表中的行才会合并,只有这样,您才会更新T1表行的相应数量,如下所示:
SELECT
*
FROM T1
T1.amount=T1.amount-t.totalAmount
因此,在这次更新之后,您的T1表应该如下所示:
SELECT
*
FROM T1
结果:
month year amount
10 2015 4500
11 2015 3800
编辑:
当您希望查询在SqlLite中工作时,您标记了问题MySQL
。
SQLlite
Sqllite查询:
UPDATE T1
SET T1.amount = T1.amount - (
SELECT
SUM(T2.amount)
FROM
T2
WHERE
T1.`month` = T2.`month`
AND T1.`year` = T2.`year`
);
如果我能让你明白这一点,请告诉我@user3796596Subrata,当我尝试在线测试工具时,解决方案在SQL上工作,但这在android sqlite上不起作用,它在“JOIN”关键字处出现语法错误,请帮助检查Edit
seciton中的SQL lite更新查询@用户3796596如果我能让你明白这一点,请告诉我@user3796596Subrata,当我尝试在线测试工具时,解决方案在SQL上工作,但这在android sqlite上不起作用,它在“JOIN”关键字处出现语法错误,请帮助检查Edit
seciton中的SQL lite更新查询@User3796596伙计们,当我尝试在线测试工具时,这些解决方案对SQL有效,但以下两个解决方案都不适用于android sqlite,它在“AS”和“INNER”关键字处出现语法错误,请帮助伙计们,当我尝试在线测试工具时,这些解决方案对SQL有效,但以下两个解决方案都不适用于android sqlite,它给出了“AS”和“internal”关键字处的语法错误,pls helpGiorgos,当我在在线测试工具中尝试时,解决方案在SQL上工作,但这在android sqlite上不起作用,它给出了“AS”关键字处的语法错误,plshelp@user3796596您已经用mysql标记了这个问题。sqlite的更新语法可能稍有不同。@user3796596请检查我所做的编辑。它应该在sqlite.Giorgos中工作,当我尝试在线测试工具时,解决方案在SQL上工作,但在android sqlite上不工作,它在“AS”关键字处给出语法错误,请help@user3796596您已经用mysql标记了这个问题。sqlite的更新语法可能稍有不同。@user3796596请检查我所做的编辑。它应该在sqlite中工作。