我有一个名为UserProductDetails的表,其中UPID是主键,而UPID中另一个名为UserTasks的表只是可以为空的列。两个表都将UserID作为公共列。
对于任何特定用户,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 :(得分:1)
尝试:
UPDATE UserTasks u
SET u.UPID = (SELECT MIN(up.UPID)
FROM UserProductDetails up
WHERE up.UserID = u.UserID)
答案 1 :(得分:1)
最终根据Milen Pavlov的建议使用以下查询
/*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
答案 2 :(得分: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)
答案 3 :(得分:0)
您的代码中存在三个问题。
试试这个:
update
UserTasks
set
UPID = (
select
min(UserProductDetails.UPID) AS UPID
from
UserProductDetails
where
UserTasks.UserId = UserProductDetails.UserID
)