두 개의 테이블이 있습니다. 표 1은 다양한 개인 기둥이있는 기본 "연락처"스타일 테이블입니다. 표 1의 필드 중 하나는 표 2를 참조하는 조회 열입니다. 새 열을 만들거나 표 1의 빈 열을 표 2의 실제 조회 값과 함께 설정하려고합니다. 가장 효율적인 방법은 무엇입니까? MSSQL에서 처리 시간, 즉 다수의 행에 대한 최소화가 최소화 되었습니까?조회 값을 사용하는 테이블을 역 정규화 하시겠습니까?
답변
다음 코드는 작동 :
update dbo.MyContacts
set StateAbbreviation = S.StateAbbreviation
from dbo.MyContacts C
inner
join States S
on C.State = S.StateId
올바른 구문은 다음과 같습니다
update c
set StateAbbreviation = S.StateAbbreviation
from dbo.MyContacts C inner join
States S
on C.State = S.StateId;
참고 update
의 별명의 사용. 테이블 이름을 사용하면 업데이트되는 테이블과 FROM
절에 참조 된 테이블 사이에 링크가 없기 때문에 테이블의 모든 행이 임의의 값으로 업데이트됩니다.
그러나 모든 행을 업데이트하고 싶었습니다. null에 대한 별칭입니까? 따라 와야할지 모르겠다. 내 경우에는 필드가 null이 아닙니다. –
@CurtisWhite. . . 나는 그 생각을 끝내지 않았다는 것을 깨닫는다. –
사용할 사실은 많지 않지만 새 열을 추가 한 후 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
;
내 생각 엔 당신이 어딘가에 성능이 향상됩니다 기대하고있다,하지만 지금은 다른 방법으로 비용을 것이 새 열을 유지해야합니다.
주의 : 먼저 테스트 등
질문은 지금 해결 되었습니까? 이 답변에 대해 질문이 있습니까? [help/accepting] (https://stackoverflow.com/help/someone-answers)에 대한 자세한 내용은 "[** 클릭 **] (https://ibb.co/ikqyO6)"대답을 수락하려면 –
를 백업을 그리고 당신의 질문은 무엇인가? – Blorgbeard
@CurtisWhite, 3k 명성으로 나는 당신이 어떻게해야 할지를 안다. 샘플 데이터와 원하는 결과를 제공하십시오. 나는이 감각을 전혀 이해할 수 없다. "새 열을 만들거나 표 1에서 빈 열을 설정하고 싶습니다." – Alex