Sql 使用join和min的Update语句
我有一个workflow.procedures表,需要使用workflow.events表中的值进行更新,该表基于两个表中的公共过程id列。一个过程有许多事件,我需要从events表中选择在其event_id列中具有最低值的行。这两张表看起来像这样: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
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;