【发布时间】: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