0

有没有更好的方法来执行以下操作?(而不是有两个单独的查询)如果 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 语句在一个查询中执行此操作时出现以下错误:

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

但它给出了以下错误:'聚合可能不会出现在 UPDATE 语句的集合列表中'。

我想在一个查询中使用 case when then else 通过检查记录是否存在来执行此操作。我怎样才能做到这一点?

4

1 回答 1

1

您可以尝试这样的事情,EXISTSCASE语句中使用:

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

注意:这将更新 ID 在两个表中的所有记录,除非您在其上添加WHERE子句。另外,我不确定您是否要UserTypeId使用值更新USER1USER2,这是您的第三UPDATE条语句试图做的。如果没有看到完整的数据库架构,很难准确。

于 2013-04-10T10:19:02.430 回答