2014-03-03 161 views
0

我有一個名爲UserProductDetails的表,其中UPID是主鍵,UPID中的另一個名爲UserTasks的表只是可空列。兩個表都具有用戶ID作爲公共列。如何更新另一個表的列中的一個表的一列

UserProductDetails中的UPID對於任何特定用戶都可以是多個。

我想從UserProductDetails的任何UPID更新UserTasks.UPID。

我該怎麼做?

我想財產以後如下

update UserTasks 
set UPID = 
select MIN(UserProductDetails.UPID) AS UPID, GETDATE() from UserProductDetails where UserId in 
(select UserID from UserTasks t) group by UserId 
+0

您正在使用哪個數據庫管理系統? Postgres的?甲骨文? –

回答

1

結束了使用下面的查詢基於米倫巴甫洛夫的建議

/*Adding random but user specific UPID and then making UPID as non-nullable.*/ 
begin tran 
UPDATE 
    dbo.UserTasks 
SET 
    UPID = A.UPID 
    FROM 
(SELECT UserId, MIN(CAST(UPID AS BINARY(16))) AS UPID FROM UserProductDetails GROUP BY UserId) A 
WHERE userTasks.UserID = A.UserID 
COMMIT 

GO 
0

我認爲你要更新的UserTasks表兩列 - 日期列和UPID列。如果是這樣的話,下面的更新應該可以工作。它將日期列更新爲GETDATE(),並選擇兩個表中與UserID列匹配的UPID值之一。我已經使用TOP 1,因爲您已經提到過。

UPDATE UserTasks 
SET 
DateColumn = GETDATE(), 
UPID = (SELECT TOP 1 UserProductDetails.UPID 
     FROM UserProductDetails 
     WHERE UserProductDetails.UserId = UserTasks.UserID) 
0

你的代碼有三個問題。

  1. 你忘了在你的子查詢中的括號
  2. 你的子查詢必須只返回一列
  3. 限制子選擇

匹配外部查詢試試這個:

update 
    UserTasks 
set 
    UPID = ( 
     select 
      min(UserProductDetails.UPID) AS UPID 
     from 
      UserProductDetails 
     where 
      UserTasks.UserId = UserProductDetails.UserID 
    ) 
1

試用:

UPDATE  UserTasks u 
SET   u.UPID = (SELECT MIN(up.UPID)  
         FROM UserProductDetails up 
         WHERE up.UserID = u.UserID) 
+1

感謝米倫...你的建議是什麼讓我回答:) –

相關問題