2012-05-11 4 views
0

これはおそらくSQLの人々のための非常に単純な質問です。このUPDATEは、私が意図していることを達成しますか?

私は、プロダクションテーブル(PROVIDER_SERVICE)で更新したいいくつかのフィールドの古い値と新しい値を保存した一時テーブル(TMP_VALIDATION_DATA)と、更新する必要のある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 PROVIDER_SERVICE 
set END_DATE = (
    select NewPvSvcEndDate 
    from TMP_VALIDATION_DATA T 
    where T.PROVIDER_SERVICE_UUID = PROVIDER_SERVICE.PROVIDER_SERVICE_UUID 
) 

私の更新が間違っている場合は、修正をお願いしますか?ありがとう。

答えて

3

クエリはすべてのレコードを更新し、サブクエリに複数のレコードがあるとエラーが発生することがあります。私はまたあなたの構文をJOINのように変更します。あなたはすべてのレコードUPDATEにしたくない場合は

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 

、その後、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 
0

これはすべてのレコードを更新するか、エラーを出します(複数の値を持つ列を更新しようとするとどうなるかわかりません)。

関連する問題