2015-01-29 2 views
0

하나의 테이블에서 다른 테이블로 일부 값을 삽입하고이를 가능하게하는 방법을 궁금합니다.다른 테이블의 특정 열에 삽입하십시오.

표 A에는 A_1 및 A_2가 공란 인 열이 4 개 있고 일부 행에이 있습니다.

표 B에는 B_1 및 B_2가 인 모든 열에이 채워진 3 개의 열이 있습니다.

행이 누락되어있는 인 A_1 및 A_2에 각각 B_1 및 B_2 값을 삽입하고 싶습니다. 나는 id을 모두 합류 목적으로 사용할 수 있습니다.

내가

proc sql; 
    insert into A 
    (A_1 , A_2) 
    as select B_1 , B_2 
    from B 
    where A_1 = '' and A_2 = '' 
; 
quit; 

답변

2

아래의 줄을 생각하고 나는 SAS에 익숙하지 않은 해요, 당신은 당신의 RBDMs를 나열하지 않았지만, 쿼리의 기본 개념은 다음과 같습니다

update tableA 
set a_1 = b.b_1 , 
    a_2 = b.b_2 
from tableA a 
inner join tableB b on a.Id = b.Id 
where a.a_1 is null 
    and a.a_2 is null 

삽입 문장이 시작되었지만 시나리오를 오해하고있는 경우가 아니면 두 테이블간에 ID가있는 경우 실제로 업데이트를 찾고있는 것처럼 들립니다.

"id"필드에서 테이블 a와 b를 조인 한 다음 a.a_1과 a.a_2가 모두있는 경우에만 a.a_1을 b.b_1로, a.a_2를 b.b_2로 업데이트합니다. null - null 또는 빈 문자열을 의미하는지 확실하지 않았습니다. 당신이 빈 문자열을 의미하는 경우, 나는 그들이 나에서 누락 된 경우에 행을 삭제하지 않는 한 가입 왼쪽으로 사용 a.a_1 = ''

-1
data a; 
    key = 1; 
    a_1 = 4; 
    a_2 = 6; 
    output; 
    key = 2; 
    a_1 = .; 
    a_2 = 6; 
    output; 
    key = 3; 
    a_1 = 4; 
    a_2 = .; 
    output; 
    run; 

    data b; 
    key = 1; 
    b_1 = 14; 
    b_2 = 62; 
    output; 
    key = 2; 
    b_1 = 3; 
    b_2 = 64; 
    output; 
    key = 3; 
    b_1 = 54; 
    b_2 =6 ; 
    output; 
    run; 


    proc sql; 
    create table a as 
    select 
    coalesce(a_1,b_1) as a1, 
    coalesce(a_2,b_2) as a2 
    from a 
    left join b 
    on 
    (
    a.key = b.key 
    );quit; 

a.a_1 is null을 전환합니다.

이 PROC 당신에게 경고를 줄 것이다 :

WARNING: This CREATE TABLE statement recursively 
    references the target table. A consequence of 
    this is a possible data integrity problem. 

하지만 내 경험에서

, 그냥 잘 작동합니다.

관련 문제