【问题标题】:Mysql UPDATE multi rows on tableMysql UPDATE 表上的多行
【发布时间】:2016-05-20 18:29:13
【问题描述】:

我有一个table1,其列id_month 的值=1months 的值=6 并将其从6 更新到12。我需要此更改对table2 的影响选择所有具有id_months 且值为1 的行并将months 更改为12 并计算date_start+ months 的新值并使用新日期更新date_end

table1 那样

id_month | months
1        | 6
2        | 12

table2 那样

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

谢谢。

【问题讨论】:

  • 您的日期字段实际上是 CHAR|VARCHAR 类型的吗?
  • 日期类型! 2016-01-01
  • 唷!大声笑 ....接听来电。
  • 数据类型可以是 CHARVARCHARDATEDATETIME ...你显示 Table1 和 Table2 但我看不到你想要什么输出

标签: mysql sql-update multirow


【解决方案1】:

认为您可以在日期数学中使用字段...

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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2013-09-22
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多