복붙노트

[SQL] 여러 테이블에서 SQL INSERT INTO

SQL

여러 테이블에서 SQL INSERT INTO

이것은 나의 표 1 :

NAME       AGE        SEX        CITY             ID

Clara      22         f          New York         1
Bob        33         m          Washington       2
Sam        25         m          Boston           3

이것은 나의 표 2 :

NUMBER       ID
555-1111     1
555-2222     2
555-3333     3

지금은 어떤 쇼 나에게 모든 정보를 테이블 3 원하는 :

NAME       AGE        SEX        CITY             ID        NUMBER

Clara      22         f          New York         1         555-1111
Bob        33         m          Washington       2         555-2222
Sam        25         m          Boston           3         555-3333

I는 표 1 내지 표 3 값만에 삽입 먼저 시도하고 I는 식 이드이고 내측과 표 2의 값은 표 3 조인 삽입.

INSERT INTO table3 { name, age, sex, city, id}
SELECT name, age, sex, city, id
FROM table 1



INSERT INTO table3 { name, age, sex, city, id, number}
SELECT name, age, sex, city, id, number
FROM table 2 p
INNER JOIN table 3 c ON c.Id = p.Id

그러나 모든 I get 및 내 값의 중복입니다. 대신 3 개 항목을 가지고, 나는 어떤 숫자 널 (null)이 9 개 항목, 같은, 일부는 수와 나머지 널 (null)을 가지고 있고, 일부는 정확합니다.

나는 희망 누군가가 나를 도울 수

편집하다

지금은이 같은 세 번째 표가 오전하는 경우 :

NATIONALITY       ID

Canadian          1
American          2
French            3

어떻게 하나 개의 테이블에 3 개 테이블을 병합 할 수 있을까?

해결법

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

    1.당신은 하나의 INSERT가 필요합니다 :

    당신은 하나의 INSERT가 필요합니다 :

    INSERT INTO table4 ( name, age, sex, city, id, number, nationality)
    SELECT name, age, sex, city, p.id, number, n.nationality
    FROM table1 p
    INNER JOIN table2 c ON c.Id = p.Id
    INNER JOIN table3 n ON p.Id = n.Id
    
  2. ==============================

    2.내가 대신 새 테이블을 만드는 제안, 당신은 단지 콤바인 두 테이블이 방법은 표 1, 표 2의 데이터가 변경 중, 세 번째 테이블을 업데이트 할 필요가없는 경우하는보기를 사용 :

    내가 대신 새 테이블을 만드는 제안, 당신은 단지 콤바인 두 테이블이 방법은 표 1, 표 2의 데이터가 변경 중, 세 번째 테이블을 업데이트 할 필요가없는 경우하는보기를 사용 :

    CREATE VIEW dbo.YourView
    AS
        SELECT  t1.Name, t1.Age, t1.Sex, t1.City, t1.ID, t2.Number
        FROM    Table1 t1
                INNER JOIN Table2 t2
                    ON t1.ID = t2.ID;
    

    당신이 한 테이블에서 레코드를 가질 수 있다면, 다른에, 당신은 전체 조인을 사용할 필요가 없습니다 :

    CREATE VIEW dbo.YourView
    AS
        SELECT  t1.Name, t1.Age, t1.Sex, t1.City, ID = ISNULL(t1.ID, t2.ID), t2.Number
        FROM    Table1 t1
                FULL JOIN Table2 t2
                    ON t1.ID = t2.ID;
    

    모든 기록은 표 1에있을 것입니다 및 일부 표 2에, 당신은 LEFT 사용해야 알고있는 경우에 가입 :

    CREATE VIEW dbo.YourView
    AS
        SELECT  t1.Name, t1.Age, t1.Sex, t1.City, t1.ID, t2.Number
        FROM    Table1 t1
                LEFT JOIN Table2 t2
                    ON t1.ID = t2.ID;
    

    모든 기록은 표 2에있을 것입니다 및 일부 표 2는 다음 가입 권리를 사용할 수 있습니다 알고있는 경우

    CREATE VIEW dbo.YourView
    AS
        SELECT  t1.Name, t1.Age, t1.Sex, t1.City, t2.ID, t2.Number
        FROM    Table1 t1
                RIGHT JOIN Table2 t2
                    ON t1.ID = t2.ID;
    

    아니면 그냥 테이블의 순서를 반대로하고 조인 LEFT를 사용 (내가 바로 가입보다는이 더 논리적 찾을 수 있지만, 개인적인 취향입니다) :

    CREATE VIEW dbo.YourView
    AS
        SELECT  t1.Name, t1.Age, t1.Sex, t1.City, t2.ID, t2.Number
        FROM    Table2 t2
                LEFT JOIN Table1 t1
                    ON t1.ID = t2.ID;
    
  3. ==============================

    3.일을 시도 :

    일을 시도 :

    INSERT INTO table3(NAME,AGE,SEX,CITY,ID,NUMBER)
    SELECT t1.name,t1.age, t1.sex,t1.city,t1.id,t2.number
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id = t2.id
    

    LEFT JOIN을 사용하여,이 표 3, 표 1에서 모든 레코드를 삽입되며, 경기 표 2 조인 조건 사람을 위해, 그것은 또한 자신의 번호를 삽입합니다.

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

    4.여기에 D 스탠리의 대답에 3 개 이상의 테이블에 대한 짧은 확장은 다음과 같습니다

    여기에 D 스탠리의 대답에 3 개 이상의 테이블에 대한 짧은 확장은 다음과 같습니다

    INSERT INTO other_table (name, age, sex, city, id, number, nationality)
    SELECT name, age, sex, city, p.id, number, n.nationality
    FROM table_1 p
    INNER JOIN table_2 a ON a.id = p.id
    INNER JOIN table_3 b ON b.id = p.id
    ...
    INNER JOIN table_n x ON x.id = p.id
    
  5. ==============================

    5.내가 제대로 이해하고있어 경우에, 당신은 함께 표 1 및 표 2에 합류 한 쿼리에서이 작업을 수행 할 수 있어야한다 :

    내가 제대로 이해하고있어 경우에, 당신은 함께 표 1 및 표 2에 합류 한 쿼리에서이 작업을 수행 할 수 있어야한다 :

    INSERT INTO table3 { name, age, sex, city, id, number}
    SELECT p.name, p.age, p.sex, p.city, p.id, c.number
    FROM table1 p
    INNER JOIN table2 c ON c.Id = p.Id
    
  6. ==============================

    6.뷰를 사용하여 미리 정의 된 방식으로 두 테이블에서 값을 표시하려면

    뷰를 사용하여 미리 정의 된 방식으로 두 테이블에서 값을 표시하려면

    http://www.w3schools.com/sql/sql_view.asp

  7. ==============================

    7.여기에 예를 들어 여러 테이블이 공통의 ID가없는 경우, 당신은 내가 내부가 그들과 합류 할 수 있도록 공통의 ID를 만들 commonId으로 1을 사용, 자신을 만들 수있다 :

    여기에 예를 들어 여러 테이블이 공통의 ID가없는 경우, 당신은 내가 내부가 그들과 합류 할 수 있도록 공통의 ID를 만들 commonId으로 1을 사용, 자신을 만들 수있다 :

    Insert Into #TempResult
    select CountA, CountB, CountC  from
    
    (
    select Count(A_Id) as CountA, 1 as commonId from tableA
      where ....
      and  ...
      and   ...
    ) as tempA
    
    inner join
    (
    select Count(B_Id) as CountB, 1 as commonId from tableB
      where ...
      and ...
      and  ...
     ) as tempB
    
    on tempA.commonId = tempB.commonId
    
    inner join
    (
    select Count(C_ID) as CountC, 1 as commonId from tableC
    where ...
    and   ...
    ) as tempC
    
    on tmepB.commonId = tempC.commonId
    
    --view insert result
    select * from #TempResult
    
  8. from https://stackoverflow.com/questions/20404682/sql-insert-into-from-multiple-tables by cc-by-sa and MIT license