0

次のことを行うより良い方法はありますか?(2 つの個別のクエリを使用する代わりに) AdminDetails テーブルにレコードが存在する場合、UserTypeId 列を ' USER1' または ' 'に更新したいと考えています。USER2

UPDATE Usernames
SET UserTypeId = (select Id from UserTypes where code = 'USER1')
WHERE EXISTS
(SELECT AdminDetails.Id
FROM AdminDetails
WHERE AdminDetails.Id = Usernames.Id)

UPDATE Usernames
SET UserTypeId = (select Id from UserTypes where code = 'USER2')
WHERE EXISTS
(SELECT AdminDetails.Id
FROM AdminDetails
WHERE AdminDetails.Id = Usernames.Id)

使用してCOUNT()みましたが、内部結合と case ステートメントを使用して 1 つのクエリでこれを実行しようとすると、次のエラーが発生しました。

UPDATE  Usernames
SET     UserTypeId = (CASE WHEN COUNT(AdminDetails.Id) > 0 THEN 'USER1' ELSE 'USER2' END)
FROM    AdminDetails
        INNER JOIN Usernames AS un
            ON  AdminDetails.Id = un.UserId

しかし、次のエラーが発生します

レコードが存在するかどうかを確認することにより、case when then else を使用して 1 つのクエリでこれを実行したいと考えています。これどうやってするの?

4

1 に答える 1

1

ステートメントEXISTS内で使用して、次のようなことを試すことができます。CASE

UPDATE  Usernames
SET     UserTypeId = (CASE WHEN EXISTS 
                                (SELECT AdminDetails.Id
                                 FROM AdminDetails
                                 WHERE AdminDetails.Id = Usernames.Id) 
                           THEN 'USER1' ELSE 'USER2' END)

注:WHEREこれにより、句を追加しない限り、ID が両方のテーブルにあるすべてのレコードが更新されます。UserTypeIdまた、 を値USER1andで更新するかどうかもわかりません。USER2これは、3 番目のUPDATEステートメントで実行しようとしていることです。完全なデータベース スキーマを確認しないと、正確に判断することは困難です。

于 2013-04-10T10:19:02.430 に答える