0

これはおそらく、SQL 関係者にとっては非常に単純な質問です。

一時テーブル (TMP_VALIDATION_DATA) があり、プロダクション テーブル (PROVIDER_SERVICE) で更新したいいくつかのフィールドの古い値と新しい値、および更新する必要がある PROVIDER_SERVICE レコードの uuid が格納されています。

私が達成したいのは、疑似コードでこれです:

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 
)

私のUPDATEが間違っている場合、訂正をお願いできますか? ありがとう。

4

2 に答える 2

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
于 2012-05-11T21:45:09.287 に答える
0

これにより、すべてのレコードが更新されるか、エラーが発生します(そのような複数の値で列を更新しようとするとどうなるかわかりません)。

于 2012-05-11T21:42:21.857 に答える