Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于另一个表的SQL更新表_Mysql - Fatal编程技术网

Mysql 基于另一个表的SQL更新表

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

我有两张桌子 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
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中工作。