2013-08-26 2 views
0

나는 다음과 같은 테이블이 있습니다업데이트 기존 레코드 테이블

Diary Table

History Table

내가 최근에 [기록 표 ID] 열을 추가하고 추가를 히스토리 테이블에 대한 외래 키 참조. 일어나는 일은 [기록 테이블 ID] 열의 값을 기록 테이블의 ID 값으로 업데이트해야합니다. 나는 이력 표의 설명 열에 Diary 표의 ID가있는 항목 2 개를 사용하여 이미 올바르게 가져올 수있었습니다. 아래의 쿼리는 다음을 수행합니다.

Update Diary 
SET [History Table ID] = History.ID 
from History with (nolock) 
WHERE [Lookup Table HA] = 7 
and [Lookup Table HAS] = 19 
and Description LIKE 'Diary item (%' 
and PATINDEX('%)%', Description) > 13 
and Dairy.ID = SUBSTRING(Description, 13, PATINDEX('%)%', Description)-13) 

나머지는 전혀 업데이트 할 수 있습니까? 나는이 문제를두고 머리를 맞을 수가 없다.

미리 감사드립니다.

UPDATE :

업데이트 표 샷은 아래를 참조하십시오

Updated Diary and History

+0

를,이 두 테이블 사이에 보인다, 열 "UserAssignedBy는", "IssueNumber"표 "일기"에 대한 "GlobalId는"이 복합 키에 "UsersAssignedFor", "IssueNumber는 해당 ","GlobalId "는 기록 테이블입니다. 그래? –

+0

"Dairy.ID"의 마지막 행에 오타가 있습니까? –

+0

@Pranav,이 경우 사용자에게 문제를 할당했지만 일반적으로 UserAssignedFor 및 UserAssignedBy는 관리자가 문제를 직원에게 할당하므로 다릅니다. IssueNumber는 항상 동일합니다. GlobalId는 항상 두 테이블에서 동일합니다. – frans

답변

0

아마도이 정확하지 않습니다,하지만 보이는 : 이것은 내 업데이트의 문제와 결합 거짓말은 어디 Global Id (및 Issue number)과 같이 두 테이블을 연결합니다. 그렇다면, 당신은 할 수 있습니다 :

Update Diary 
    SET [History Table ID] = History.ID 
    from History with (nolock) 
    WHERE Diary.[Global ID] = History.[Global ID] and 
      Diary.[Issue number] = History.[Issue number]; 

그렇지 않으면, 당신은 Diary 테이블의 기록에 History에 하나 개의 레코드를 연결하는 논리를 파악해야합니다.

편집 :

내가 당신이 일치하는 항목이 여러 개있을 때 가장 큰 역사의 ID를한다고 가정하자. 당신이 코멘트에서 언급했듯이

Update Diary 
    SET [History Table ID] = h.ID 
    from (select [Global ID], [Issue number], max(id) as maxid 
      from History with (nolock) 
      group by [Global ID], [Issue number] 
     ) h 
    WHERE Diary.[Global ID] = h.[Global ID] and 
      Diary.[Issue number] = h.[Issue number]; 
+0

내 실수. @Gordon Linoff 불행히도 IssueNumber에 해당하므로 충분하지 않습니다. History와 Diary 모두 동일한 IssueNumber를 가진 인스턴스가 둘 이상있을 수 있습니다. 예 : G00001은 globalId가 1이 될 것입니다. History에서도 동일합니다. 따라서 [Global ID] 로의 가입은 충분하지 않습니다. 내 스크린 샷은 그것을 지적하지 않습니다. 사과드립니다. – frans

+0

@frans. . . 그런 다음 'Issue Number'를 로직에 추가하십시오. –

+0

[글로벌 ID]와 [이슈 번호]가 같은 두 테이블에 여러 레코드가있을 수 있습니다.그래서 1, G0000001는 일기에 3 번, 역사에 20 번 존재할 수 있습니다. 그것이 그토록 어려운 일입니다. – frans

0

는 "IssueNumber은 항상 동일합니다이 GlobalId는 것이다 항상 두 테이블에서 동일해야합니다. " 따라서이 잘 작동합니다 : 스크린 샷에서

UPDATE Diary 
     SET [History Table ID] = History.ID 
    FROM History WITH (NOLOCK) 
     WHERE Diary.[Global ID] = History.[Global ID] 
     AND Diary.IssueNumber = History.IssueNumber 
+0

내 이미지가 약간 오도 할 수 있다고 생각합니다. 동일한 값을 가진 하나 이상의 이슈 번호가있을 수 있습니다. 이는 이슈 번호에 해당하는 것과 동일한 값을 가진 GlobalId 이상일 것임을 의미합니다. 역사와 동일합니다. 이것은 모든 기록을 갱신한다는 것을 기억하십시오. 내 이미지에는 7 번과 8 번 레코드가 이미 질문에 게시 된 쿼리로 업데이트됩니다. 위에서 제공 한 쿼리는 모든 것을 업데이트합니다. 내 이미지가 약간 오도 될 수도 있습니다. 사과 다시. – frans

+0

"[Lookup Table HA] = 7 및 [Lookup Table HAS] = 19"조건과 관련이 있습니까? 여기에 귀하의 코드에 존재합니다 ... –

+0

[조회 테이블 HA]는 추가 된 일기 항목에 대해 값 7을 가지며 [조회 테이블 HAS]에는 19가 있습니다. 따라서 이것은 일기 항목이 추가되었지만 사용할 수 없음을 나타냅니다. 혼자. – frans

관련 문제