有更好的方法可以做到以下几点吗? (而不是有两个单独的查询)我想将UserTypeId列更新为“USER1
”
如果AdminDetails表中存在记录,则为“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来执行此操作,然后检查是否存在记录。我怎么能这样做?
答案 0 :(得分: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)
注意:这将更新ID在两个表中的所有记录,除非您在其上添加WHERE
子句。另外,我不确定您是否希望使用值UserTypeId
和USER1
更新USER2
,这是您的第三个UPDATE
语句尝试执行的操作。如果没有看到完整的数据库架构,就很难确切。