2014-03-03 5 views
0

UPID가 기본 키이고 UPID에서 UserTasks라는 다른 테이블이 null 허용 열인 UserProductDetails라는 테이블이 있습니다. 두 테이블 모두 UserID가 공통 열입니다.다른 테이블의 열에서 한 테이블의 한 열을 업데이트하는 방법

UserProduct의 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

는 Milen 파블로프의 제안에 따라 쿼리 아래 사용하여 종료

/*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 
사용중인 DBMS
0

아래로 뭔가를해야만 시도하고 난 당신이 UserTasks 테이블에 두 개의 열 업데이트하려고 생각 - 날짜 열과 UPID 열을. 이 경우 아래 업데이트가 작동합니다. datecolumn을 GETDATE()으로 업데이트하고 두 테이블에서 UserID 열과 일치하는 UPID 값 중 하나를 선택합니다. 나는 TOP 1을 언급했다.

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

코드에 세 가지 문제점이 있습니다.

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

:

  1. 당신은
  2. 귀하의 부속 선택 만이 시도 외부 쿼리를

에 맞게 부속 선택을 제한 한 열

  • 를 반환해야합니다 부속의 주위에 괄호를 잊어 버렸습니다 사용해보기 :

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

    감사합니다 Milen ... 당신의 제안은 나를 대답하게 이끌었습니다 :) –

    관련 문제