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,但我看不出您想要什么输出