我正在尝试执行以下操作:
数据库中的一个表名为service_state_history
,该表有三列:
service_id
- 指的是与service_state相关的服务的ID。 (这也不是外键,因为在这种情况下,关系是在JPA代码中完成的。)
state_started
列,其中包含DATETIME
个值,表示该行的状态何时开始。
state
列,描述该历史记录条目的状态并具有以下VARCHAR值:(STANDBY
,IN PROGRESS
,DONE
)
数据库中的另一个表名为services
,该表有两个相关列:
id
BIGINT done_date
DATETIME 现在,当done_date
列的services
列时,我应该从service_state_history
表的列state_started
更新state
中的DONE
列行中的值为service_id
,id
中的services
值与{{1}}中的{{1}}匹配。
这如何转化为SQL?
答案 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'