【问题标题】:Updating certain data from one table to another table once a week每周一次将某些数据从一个表更新到另一个表
【发布时间】:2015-07-29 22:23:07
【问题描述】:

我的最终目标是在特定条件下将信息从表 1 更新到表 2。更具体地说,我想将 table1 中的日期更新为 table2,其中 id 的匹配项和 table2 中的日期为 NULL。

我希望每个星期天都这样。

具体如下:

** 请记住,payee_id 和 id 相同,但在两个不同的表中。 **

我计划从中复制的表称为订单,但我只想从该表中选择某些数据。我的查询如下所示:

表 1

SELECT movement.payee_id,
min(origin_stop.sched_arrive_early) first_date

FROM orders

LEFT JOIN movement_order ON orders.id = movement_order.order_id
LEFT JOIN movement ON movement.id = movement_order.movement_id
LEFT JOIN stop as origin_stop ON origin_stop.id = movement.origin_stop_id

WHERE orders.status <> 'V'
GROUP BY movement.payee_id

输出 1

payee_id           |  first_date
-------------------|-----------------
STRINGID1          |  2013-12-20 15:00:00.000
STRINGID2          |  2013-12-27 13:00:00.000

表 2

SELECT id, initial_date
FROM drs_payee

输出 2

id                 |  initial_date
-------------------|-----------------
STRINGID1          |  NULL
STRINGID2          |  NULL

表 2 的输出应该是:

id                 |  initial_date
-------------------|-----------------
STRINGID1          |  2013-12-20 15:00:00.000
STRINGID2          |  2013-12-27 13:00:00.000

我尝试解决这个问题:

UPDATE drs_payee a
    (SELECT movement.payee_id,
     min(origin_stop.sched_arrive_early) carrier_first_shipped_date

     FROM orders

     LEFT JOIN movement_order ON orders.id = movement_order.order_id
     LEFT JOIN movement ON movement.id = movement_order.movement_id
     LEFT JOIN stop as origin_stop ON origin_stop.id =    movement.origin_stop_id

     WHERE orders.status <> 'V'
     GROUP BY movement.payee_id) b
ON a.id = b.payee_id
SET a.initial_date = b.first_date
WHERE a.initial_date IS NULL

不确定它的格式是否正确,以及您是否可以在 UPDATE 中执行 SELECT,如上所示。

我相信我必须有一个循环才能找到与(i.e. where payee_id = id and initial_date is NULL) 匹配的 id。这会在存储过程中创建以循环遍历 id 并创建每周工作计划,还是某种类型的更新查询就足够了?如果可能,请使用我的数据帮助或指出更新查询或存储过程示例的方向。

提前谢谢大家!

【问题讨论】:

    标签: mysql tsql sql-update job-scheduling


    【解决方案1】:

    对于预定查询,对我来说最好的事情是创建事件。首先你必须选择你的数据库,在右上角你会在 phpmyadmin 中看到一个名为“events”的选项。您必须打开事件计划器,并且要在 phpMyadmin 中使用超级权限用户登录。

    执行此操作后,查询是:

    DROP EVENT `dates update` ;
    
    CREATE DEFINER =  `your_user_name`@`your_host_name` 
    EVENT `dates update` 
    ON SCHEDULE EVERY1 WEEK STARTS '2015-07-29 03:00:00' 
    ON COMPLETION NOT PRESERVE ENABLE DO 
    
    
    UPDATE movement a
    INNER JOIN orders b
    ON a.payee_id = b.payee_id
    SET a.initial_date = b.first_ship_date
    WHERE a.initial_date IS NULL;

    它必须有效。

    如果您需要有关超级权限的帮助,请查看this

    我希望它对你有用。

    凯奥·奥尔特加

    【讨论】:

    • 感谢@caio 的帮助。我正在尝试仅使用 mssql 和那里可用的实用程序。我将更新我的问题以反映您的 UPDATE 答案,以显示我认为它应该是什么样子。我对你的有点困惑,因为我实际上是在尝试更新表 2,它是 drs_payee 而不是移动。
    • 在这种情况下,试试这个: UPDATE drs_payee a INNER JOIN orders b ON a.payee_id = b.payee_id SET a.initial_date = b.first_ship_date WHERE a.initial_date IS NULL;
    【解决方案2】:

    更新表2 payee_id = id 上的内部连接 ​​table1 设置 initial_date=first_date 其中 initial_date 为空

    通过 SQL 服务器代理,我们可以根据我们的要求安排查询(例如每周日)

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2020-05-22
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多