Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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更新表上的多行_Mysql_Sql Update_Multirow - Fatal编程技术网

Mysql更新表上的多行

Mysql更新表上的多行,mysql,sql-update,multirow,Mysql,Sql Update,Multirow,我有一个table1,它有一列id\u month,值为1和months,值为6,并将其从6更新到12。我需要更改表2的效果,以选择所有具有id\u months且值为1的行,并将months更改为12,计算date\u start+月份的新值,并用新日期更新date\u end 表1是这样的吗 id_month | months 1 | 6 2 | 12 id | id_month | months | date_start | date_end 1 | 1

我有一个
table1
,它有一列
id\u month
,值为
1
months
,值为
6
,并将其从6更新到12。我需要更改表2的效果,以选择所有具有
id\u months
且值为
1
的行,并将
months
更改为
12
,计算
date\u start
+月份的新值,并用新日期更新
date\u end

表1是这样的吗

id_month | months
1        | 6
2        | 12
id | id_month | months | date_start  | date_end
1  | 1        | 6      | 2016-01-01  | 2016-07-01
2  | 1        | 6      | 2016-03-01  | 2016-09-01
3  | 1        | 6      | 2016-06-01  | 2016-12-01
4  | 1        | 6      | 2016-08-01  | 2017-02-01
表2那样

id_month | months
1        | 6
2        | 12
id | id_month | months | date_start  | date_end
1  | 1        | 6      | 2016-01-01  | 2016-07-01
2  | 1        | 6      | 2016-03-01  | 2016-09-01
3  | 1        | 6      | 2016-06-01  | 2016-12-01
4  | 1        | 6      | 2016-08-01  | 2017-02-01
谢谢。

我想你可以在日期数学中使用字段

UPDATE table1 SET months = 12 where id_month = 1;
UPDATE table1 AS t1 INNER JOIN table2 AS t2 ON t1.id_month = t2.id_month
SET t2.months = t1.months, t2.date_end = t2.date_start + INTERVAL t1.months MONTH
WHERE t1.id_month = 1;
如果没有,这将在一个查询中完成所有操作

UPDATE table1 AS t1 INNER JOIN table2 AS t2 ON t1.id_month = t2.id_month
SET t1.months = 12
  , t2.months = 12
  , t2.date_end = t2.date_start + INTERVAL 12 MONTH
WHERE t1.id_month = 1;

旁注:这就是为什么我试图避免存储冗余数据的原因,除非从性能角度来看,不存储冗余数据代价高昂;需要使派生数据保持一致。

您的日期字段实际上是CHAR | VARCHAR类型?date类型!2016-01-01呼!lol…应答传入。数据类型可以是
CHAR
VARCHAR
DATE
DATETIME
。。。您显示了表1和表2,但我看不出您想要什么输出