2017-04-13 1 views
0

조회 테이블을 기반으로 사실 테이블을 업데이트하려고합니다. 사실 표의 Addressid을 업데이트하고 조회 열의 newaddress으로 대체하고 조회 표의 oldaddress 열과 비교해야합니다.SQL UPDATE 문의 오류

Update [dbo].[fact_P] 
Set Address_Id = (Select AddressID_new 
        From AddressLookup 
        Where fact_P.Address_Id = Lookup.AddressID_old) 

를하지만 오류를 던지고 :

나는 다음과 같은 SQL 문을 작성했습니다.

+1

: 조회가 'AddressLookup'있는 그대로 내가 당신의 테이블 이름으로 착각하고 있지 않다 그래서 만약, 당신이 참여해야합니까? –

+0

@a_horse_with_no_name SQL Server 나 Access 중 하나 인 것처럼 보입니다. 나는 전자쪽으로 기울어 져 있습니다. 하지만 그 오류가 DB와 관련 있다고 생각하지 않습니다. –

+3

*** *** 오류는 무엇입니까? 기억하십시오 : 우리는 ** 당신의 화면을 볼 수없고, ** 당신의 마음을 읽을 수도 없습니다 ** ** 우리에게 말해야 할 것입니다 ** ** –

답변

0

잘못된 별칭/테이블 이름을 사용하여 하위 쿼리의 AddressID_old 열을 참조했습니다. 오인하지 않으면 대신 AddressLookup.Address_ID_old을 사용해야합니다. UPDATE 문에 대한 쿼리 아래

UPDATE [dbo].[fact_P] 
SET Address_Id = (SELECT AddressID_new FROM AddressLookup al 
        WHERE fact_P.Address_Id = al.AddressID_old) 
0

사용 :

은 1 개 값을 반환하는 경우 부분, 부질에만 허용되는 경우에
UPDATE [dbo].[fact_P] SET Address_Id = AddressID_new 
    FROM AddressLookup al 
    WHERE fact_P.Address_Id = al.AddressID_old 
0

. 사용중인 DBMS

Update fp 
set fp.Address_Id=al.AddressID_new 
    from [dbo].[fact_P] fp join AddressLookup al 
     on fp.Address_Id= al.AddressID_old 
0
Update tgt 
set Address_Id = lu.Address_Id 
from [dbo].[fact_P] tgt 
inner join AddressLookup lu 
on tgt.Address_Id = lu.AddressID_old; 
+0

감사합니다 그것은 효과가 있습니다 만, 데이터가 거대하기 때문에 오랜 시간이 걸립니다. 우리는 병합을 사용할 수 있습니다 대신 어떤 아이디어라도 더 빠르게 실행하십시오. – user7854107

+0

소스 테이블의 목표 테이블에서 수행해야 할 삽입 또는 갱신이 모두있을 때 병합을 사용해야합니다. 어쨌든 성능이 향상 될 것이라고 나는 생각하지 않습니다. 색인 생성을 올바르게 수행 할 수 있습니다. – Biswabid