2014-03-03 119 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

感谢米伦...你的建议是什么让我回答:) –

相关问题