복붙노트

[SQL] 열 수가 다른 두 개의 테이블을 Unioning

SQL

열 수가 다른 두 개의 테이블을 Unioning

나는 두 테이블 (테이블 A와 테이블 B)가 있습니다.

이 컬럼의 다른 번호를 가지고 - 말 표 A는 더 열이 있습니다.

나는 노동 조합 열에 대한이 두 테이블과 GET 널 (null) 표 B 방법이없는 수?

해결법

  1. ==============================

    1.같은 적은 열을 갖는 테이블에 대해 널 (null)로 여분의 열을 추가

    같은 적은 열을 갖는 테이블에 대해 널 (null)로 여분의 열을 추가

    Select Col1, Col2, Col3, Col4, Col5 from Table1
    Union
    Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2
    
  2. ==============================

    2.내가 여기 온 이상 대답을 따랐다. 그러나 데이터 유형의 주문에 불일치 오류가 발생했습니다. 다른 답변에서 아래의 설명을 편리하게 올 것이다.

    내가 여기 온 이상 대답을 따랐다. 그러나 데이터 유형의 주문에 불일치 오류가 발생했습니다. 다른 답변에서 아래의 설명을 편리하게 올 것이다.

    테이블의 열 순서와 동일 위의 결과는? 오라클은 열 수주 엄격한 때문이다. 이 예는 이하에서 오류가 발생 :

    create table test1_1790 (
    col_a varchar2(30),
    col_b number,
    col_c date);
    
    create table test2_1790 (
    col_a varchar2(30),
    col_c date,
    col_b number);
    
    select * from test1_1790
    union all
    select * from test2_1790;
    

    ORA-01790은 : 표현은 해당 표현과 동일한 데이터 유형을 가지고 있어야합니다

    보시다시피 오류의 근본 원인은 열 목록 지정자로 *를 사용하여 암시 불일치 열 순서입니다. 오류의 유형은 쉽게 명시 적으로 열 목록을 입력하여 방지 할 수 있습니다 :

    선택 col_a, col_b, test1_1790에서 col_c 노동 조합의 모든 test2_1790에서 col_a, col_b, col_c을 선택; 이 오류에 대한 더 자주 시나리오 때 실수로 스왑 (또는 이동) SELECT 목록에서 두 개 이상의 열 :

    select col_a, col_b, col_c from test1_1790
    union all
    select col_a, col_c, col_b from test2_1790;
    

    (가) 위의 문제가 해결되지 않을 경우 또는, 다음과 같이 열에 별칭을 만드는 방법에 대해 방법 : (쿼리는 당신과 같은 것이 아니라 여기에 포인트는 열에 별칭을 추가하는 방법입니다.)

    SELECT id_table_a, 
           desc_table_a, 
           table_b.id_user as iUserID, 
           table_c.field as iField
    UNION
    SELECT id_table_a, 
           desc_table_a, 
           table_c.id_user as iUserID, 
           table_c.field as iField
    
  3. ==============================

    3.일반적으로 당신은 Kangkan의 대답이 정확한지 있도록 설정 기반 연산자를 사용하고 동일한 수의 열이 있어야합니다.

    일반적으로 당신은 Kangkan의 대답이 정확한지 있도록 설정 기반 연산자를 사용하고 동일한 수의 열이 있어야합니다.

    SAS SQL은 시나리오를 처리하기 위해 특정 연산자를 가지고 :

    SELECT * FROM tabA
    OUTER UNION CORR
    SELECT * FROM tabB;
    

    에 대한:

    +---+---+
    | a | b |
    +---+---+
    | 1 | X |
    | 2 | Y |
    +---+---+
    
    OUTER UNION CORR
    
    +---+---+
    | b | d |
    +---+---+
    | U | 1 |
    +---+---+
    
    <=>
    
    +----+----+---+
    | a  | b  | d |
    +----+----+---+
    |  1 | X  |   |
    |  2 | Y  |   |
    |    | U  | 1 |
    +----+----+---+
    

    U-SQL은 유사한 개념을 지원합니다 :

    그리고 코드 :

    @result =    
        SELECT * FROM @left
        OUTER UNION BY NAME ON (*) 
        SELECT * FROM @right;
    

    편집하다:

    외부 노동 조합의 개념은 KQL에 의해 지원됩니다 :

    예:

    let t1 = datatable(col1:long, col2:string)  
    [1, "a",  
    2, "b",
    3, "c"];
    let t2 = datatable(col3:long)
    [1,3];
    t1 | union kind=outer t2;
    

    산출:

    +------+------+------+
    | col1 | col2 | col3 |
    +------+------+------+
    |    1 | a    |      |
    |    2 | b    |      |
    |    3 | c    |      |
    |      |      |    1 |
    |      |      |    3 |
    +------+------+------+
    

    데모

  4. ==============================

    4.단 1 행, 당신은 가입 사용할 수 있습니다

    단 1 행, 당신은 가입 사용할 수 있습니다

    Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2;
    
  5. from https://stackoverflow.com/questions/2309943/unioning-two-tables-with-different-number-of-columns by cc-by-sa and MIT license