Sql 使用join和min的Update语句

Sql 使用join和min的Update语句,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个workflow.procedures表,需要使用workflow.events表中的值进行更新,该表基于两个表中的公共过程id列。一个过程有许多事件,我需要从events表中选择在其event_id列中具有最低值的行。这两张表看起来像这样: workflow.procedures procedure_id, default_event_ref 1 2 3 workflow.events procedure_id, event_id, event_ref 1 1

我有一个workflow.procedures表,需要使用workflow.events表中的值进行更新,该表基于两个表中的公共过程id列。一个过程有许多事件,我需要从events表中选择在其event_id列中具有最低值的行。这两张表看起来像这样:

workflow.procedures
procedure_id, default_event_ref
1
2
3

workflow.events
procedure_id, event_id, event_ref
1             1         ref_a
1             2         ref_b
2             3         ref_c
2             4         ref_d
3             5         ref_e
3             6         ref_f

procedure_id, default_event_ref
1             ref_a
2             ref_c
3             ref_e
更新后,过程表应如下所示:

workflow.procedures
procedure_id, default_event_ref
1
2
3

workflow.events
procedure_id, event_id, event_ref
1             1         ref_a
1             2         ref_b
2             3         ref_c
2             4         ref_d
3             5         ref_e
3             6         ref_f

procedure_id, default_event_ref
1             ref_a
2             ref_c
3             ref_e
我正在查看与下面的语句类似的语句,但我不确定如何声明我们需要查看event_id列中的min值来确定正确的行,因为存在一对多关系

UPDATE workflow.procedures 
SET default_event_ref = EVENT.event_ref
FROM workflow.procedures PRO 
INNER JOIN workflow.events EVENT 
ON PRO.procedure_id = EVENT.procedure_id

您的问题不是100%清楚,您必须定义一个要更新的规则,我在下面的示例中选择MIN,因为它适合您的示例。也许你必须适应另一种选择

UPDATE workflow.procedures 
SET default_event_ref = EVENT.event_ref
FROM workflow.procedures PRO 
INNER JOIN ( SELECT procedure_id, MIN(even_ref) AS event_ref) FROM workflow.events GROUP BY procedure_id) EVENT 
ON PRO.procedure_id = EVENT.procedure_id

您的问题不是100%清楚,您必须定义一个要更新的规则,我在下面的示例中选择MIN,因为它适合您的示例。也许你必须适应另一种选择

UPDATE workflow.procedures 
SET default_event_ref = EVENT.event_ref
FROM workflow.procedures PRO 
INNER JOIN ( SELECT procedure_id, MIN(even_ref) AS event_ref) FROM workflow.events GROUP BY procedure_id) EVENT 
ON PRO.procedure_id = EVENT.procedure_id

要求是更新默认事件参考,使其等于“工作流.程序”表中每个“程序id”主键的“工作流.事件”表中最小“事件id”的“事件参考”。像这样的

update pro
set default_event_ref = evr.event_ref
from workflow.procedures pro
     cross apply (select top 1 event_ref
                  from workflow.events ev
                  where ev.procedure_id = pro.procedure_id
                  order by event_id) evr;

要求是更新默认事件参考,使其等于“工作流.程序”表中每个“程序id”主键的“工作流.事件”表中最小“事件id”的“事件参考”。像这样的

update pro
set default_event_ref = evr.event_ref
from workflow.procedures pro
     cross apply (select top 1 event_ref
                  from workflow.events ev
                  where ev.procedure_id = pro.procedure_id
                  order by event_id) evr;