2013-04-10 39 views
0

有沒有更好的方法來做到以下幾點? (而不是有兩個單獨的查詢)我想更新UserTypeId列'USER1' 或'USER2'如果AdminDetails表中存在一條記錄。如何基於兩個不同表中的記錄更新列值?

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來做到這一點,然後通過檢查一個記錄是否存在。我怎樣才能做到這一點?

回答

1

你可以嘗試這樣的事情,在CASE語句中使用EXISTS

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的值USER1USER2,這是您的第三個UPDATE聲明正在嘗試執行的操作。沒有看到完整的數據庫模式,很難準確。

相關問題