对于那些SQL人来说,这可能是一个非常简单的问题。
我有一个临时表(TMP_VALIDATION_DATA),我在其中存储了我希望在生产表(PROVIDER_SERVICE)中更新的某些字段的旧值和新值,以及需要的PROVIDER_SERVICE记录的uuids更新。
我想要实现的是伪代码:
For every prov_svc_uuid uuid in TMP_VALIDATION_DATA table
Set PROVIDER_SERVICE_RATE.END_DATE = NewPvSvcEndDate
Where [uuid in temp table] = [uuid in PROVIDER_SERVICE table]
end for
这个Update语句是否能完成我的需要?
update PROVIDER_SERVICE
set END_DATE = (
select NewPvSvcEndDate
from TMP_VALIDATION_DATA T
where T.PROVIDER_SERVICE_UUID = PROVIDER_SERVICE.PROVIDER_SERVICE_UUID
)
如果我的更新不正确,请您提供更正吗?感谢。
答案 0 :(得分:3)
您的查询将更新所有记录,如果子查询中有多个记录,则可能会出错。我还会将您的语法更改为JOIN
,类似于以下内容。
update P
set END_DATE = T.NewPvSvcEndDate
FROM PROVIDER_SERVICE P
JOIN TMP_VALIDATION_DATA T
ON P.PROVIDER_SERVICE_UUID = T.PROVIDER_SERVICE_UUID
如果您不想UPDATE
所有记录,请添加WHERE
条款。
我的建议是,如果您不知道UPDATE
中会包含多少条记录,请首先将您的查询写为SELECT
,然后将其更改为UPDATE
。所以对于这个:
SELECT P.END_DATE, T.NewPvSvcEndDate
FROM PROVIDER_SERVICE P
JOIN TMP_VALIDATION_DATA T
ON P.PROVIDER_SERVICE_UUID = T.PROVIDER_SERVICE_UUID
答案 1 :(得分:0)
这将更新所有记录,或者输出错误(不确定当您尝试使用多个值更新列时会发生什么)。