2017-11-09 10 views
-2

두 개의 테이블이 있습니다. 표 1은 다양한 개인 기둥이있는 기본 "연락처"스타일 테이블입니다. 표 1의 필드 중 하나는 표 2를 참조하는 조회 열입니다. 새 열을 만들거나 표 1의 빈 열을 표 2의 실제 조회 값과 함께 설정하려고합니다. 가장 효율적인 방법은 무엇입니까? MSSQL에서 처리 시간, 즉 다수의 행에 대한 최소화가 최소화 되었습니까?조회 값을 사용하는 테이블을 역 정규화 하시겠습니까?

+0

를 백업을 그리고 당신의 질문은 무엇인가? – Blorgbeard

+2

@CurtisWhite, 3k 명성으로 나는 당신이 어떻게해야 할지를 안다. 샘플 데이터와 원하는 결과를 제공하십시오. 나는이 감각을 전혀 이해할 수 없다. "새 열을 만들거나 표 1에서 빈 열을 설정하고 싶습니다." – Alex

답변

0

다음 코드는 작동 :

update dbo.MyContacts 
    set StateAbbreviation = S.StateAbbreviation 
    from dbo.MyContacts C 
inner 
    join States S 
    on C.State = S.StateId 
0

올바른 구문은 다음과 같습니다

update c 
    set StateAbbreviation = S.StateAbbreviation 
    from dbo.MyContacts C inner join 
     States S 
     on C.State = S.StateId; 

참고 update의 별명의 사용. 테이블 이름을 사용하면 업데이트되는 테이블과 FROM 절에 참조 된 테이블 사이에 링크가 없기 때문에 테이블의 모든 행이 임의의 값으로 업데이트됩니다.

+0

그러나 모든 행을 업데이트하고 싶었습니다. null에 대한 별칭입니까? 따라 와야할지 모르겠다. 내 경우에는 필드가 null이 아닙니다. –

+0

@CurtisWhite. . . 나는 그 생각을 끝내지 않았다는 것을 깨닫는다. –

1

사용할 사실은 많지 않지만 새 열을 추가 한 후 cte를 사용하여 해당 열에 값을 설정할 수 있습니다.

ALTER TABLE table1 
ADD newcol varchar(50); 

WITH 
     cte AS (
        SELECT 
         table1.id 
         , table1.newcol 
         , table2.name AS newcol_value 
        FROM table1 
        INNER JOIN table2 ON table1.table2_fk = table2.id 
      ) 
UPDATE cte 
SET newcol = newcol_value 
; 

내 생각 엔 당신이 어딘가에 성능이 향상됩니다 기대하고있다,하지만 지금은 다른 방법으로 비용을 것이 새 열을 유지해야합니다.

주의 : 먼저 테스트 등

+0

질문은 지금 해결 되었습니까? 이 답변에 대해 질문이 있습니까? [help/accepting] (https://stackoverflow.com/help/someone-answers)에 대한 자세한 내용은 "[** 클릭 **] (https://ibb.co/ikqyO6)"대답을 수락하려면 –