2009-09-10 3 views
0

두 테이블, 연락처 테이블 및 주소 테이블이 있습니다. 주소 테이블에는 연락처 ID와 4 개의 주소 행이 있습니다. 연락처 테이블의 정보로 주소록 테이블을 업데이트하고 싶습니다. 단순화하기 위해 다음과 같이 테이블을하자 :TSQL 테이블 간 업데이트

주소 (... null가 아닌
연락처 INT null가 아닌,
주소 1의 VARCHAR (32) null가 아닌,
주소 2의 VARCHAR (32)
)

주소록 (
. ID INT 기본 키
. ADDR1에 VARCHAR (32) NOT NULL,
. ADDR2의 VARCHAR (32) 널되지
,)

주소록에서 연락처 테이블을 업데이트하는 방법 (int tsql) 어떻게해야합니까?
감사합니다.

답변

5

그렇지 않습니다. 스키마가 손상되었습니다. 두 개 이상의 장소에서 주소 데이터를 반복하고 있습니다. 그래서 연락처의 주소를 얻을 수

addresses(
. id int primary key, 
. address1 varchar(32) not null, 
. address2 varchar(32) not null 
) 

contacts(
.id int primary key 
.addressId int foreign key (addresses.id) 
} 

같은

스키마가해야 뭔가 다음과 같이 조인을 수행 할 것입니다 :

select 
    c.id contactId, 
    a.address1, 
    a.address2 
from 
    contacts c 
    join addresses a on 
     c.addressId=a.id 
where 
    [email protected] 

을하고 다음을 수행 할 업데이트하기 :

update a 
    set a.address1='27 Foo Street' 
from 
    addresses as a 
    join contacts as c 
     on a.id=c.addressId 
where [email protected]  

데이터를 데이터베이스에 복제하는 것이 거의 불가능합니다. 이 주제에 대한 자세한 정보는 데이터베이스 정규화 용어를 검색하십시오.

+0

데이터는 임시 테이블에 중복, 나는 여러 (비 임시) 테이블에서 업데이트에 포함 된 데이터를 사용하고 있습니다. –

+0

괜찮지 만 임시 테이블을 사용하지 않아도되도록 DB를 구조 할 수 있어야합니다. 업데이트 조인 패턴은 우리가 설계 한 스키마에서 이것을 달성하는 상당히 강력한 수단이다. – spender

0

나는 'spender'에 동의합니다.이 데이터를 복제해서는 안됩니다. 당신은, 그러나, 배치 갱신을해야하는 경우

, 이것은 T-SQL 문을 당신이 사용하는 것 :

UPDATE dbo.Contacts 
SET addr1 = address1, 
    addr2 = address2 
FROM dbo.Addresses 
WHERE id = contact 

당신은 단지 주소 테이블에 연락처 테이블을 조인 WHERE id = contact 절을 정의하여 및 연락처 테이블의 addr1/addr2 필드를 Addresses 테이블의 address1/address2에 해당하는 값으로 설정합니다. 매우 간단합니다.

마크