更新语句不起作用,因为子查询返回的值超过1

时间:2019-06-12 07:47:06

标签: tsql

我尝试根据比较不同表的时间戳的条件来更新整个列(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
    )
)

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

1 个答案:

答案 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值将是任意的。