我尝试根据比较不同表的时间戳的条件来更新整个列(EquipmentEvents_ID_f)的部分。如果时间戳相同,则应将ID从一个表插入到另一个表。但是,我的子查询返回多个值,这是合乎逻辑的。但是,我如何才能减少子查询……我期待您的建议!谢谢
我不能在这里使用TOP 1语句
update [MES].[MAINT].[PrioTable_Test_PR]
set [EquipmentEvents_ID_f] =
(
select a.ID
from [MES_Archive].[OEE].[A_EquipmentEvents] as a
where a.TimeStamp in
(
select b.PrioTable_timestamp_equipmentBreakdown
from [MES].[MAINT].[PrioTable_Test_PR] as b
where a.TimeStamp = b.PrioTable_timestamp_equipmentBreakdown
)
)
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
答案 0 :(得分:1)
我目前还不清楚您要执行的操作,但是我认为您的代码可以通过以下联接转换为更新:
UPDATE t
SET [EquipmentEvents_ID_f] = a.ID
FROM [MES].[MAINT].[PrioTable_Test_PR] As t
JOIN [MES_Archive].[OEE].[A_EquipmentEvents] as a
ON a.TimeStamp = PrioTable_timestamp_equipmentBreakdown
这样,您将EquipmentEvents_ID_f
设置为另一个表的ID
值,其中两个记录的时间戳都相同。
但是请注意,如果您在[MES_Archive].[OEE].[A_EquipmentEvents]
中有多个记录对应于同一时间戳,则可能会得到意外的结果-因为将要选择的id
值将是任意的。>