使用条件将日期复制到另一个表中的列

时间:2015-04-07 13:38:54

标签: sql sql-server datetime

我正在尝试执行以下操作:

数据库中的一个表名为service_state_history,该表有三列:

  • service_id - 指的是与service_state相关的服务的ID。 (这也不是外键,因为在这种情况下,关系是在JPA代码中完成的。)

  • state_started列,其中包含DATETIME个值,表示该行的状态何时开始。

  • state列,描述该历史记录条目的状态并具有以下VARCHAR值:(STANDBYIN PROGRESSDONE

数据库中的另一个表名为services,该表有两个相关列:

  • id BIGINT
  • done_date DATETIME

现在,当done_date列的services列时,我应该从service_state_history表的列state_started更新state中的DONE列行中的值为service_idid中的services值与{{1}}中的{{1}}匹配。

这如何转化为SQL?

1 个答案:

答案 0 :(得分:1)

因此,要获取将更新目标表的所有记录,您将使用从以下位置生成的结果:

SELECT service_id, state_started, state
FROM service_state_history
WHERE state = 'DONE'

要执行UPDATE,您需要JOIN将此结果集设置到标识列上的目标表,并在更新中使用state_started。类似的东西:

UPDATE s
SET s.done_date = ssh.state_started
FROM services s
INNER JOIN service_state_history ssh ON ssh.service_id = s.id
WHERE ssh.state = 'DONE'