복붙노트

[SQL] (FROM ... SELECT ...)에 ... 값 삽입

SQL

(FROM ... SELECT ...)에 ... 값 삽입

나는 다른 테이블에서 입력을 사용하여 테이블에 삽입하려합니다. 이 많은 데이터베이스 엔진에 전적으로 가능하지만, 난 항상 하루 (MySQL은, 오라클, SQL 서버, 인포믹스 및 DB2)의 SQL 엔진에 대한 올바른 구문을 기억하는 투쟁에 보인다.

는 SQL 표준에서 오는 실버 총알 구문이 있습니까 (예를 들어, SQL은-92) 나 기본 데이터베이스에 대한 걱정없이 값을 삽입 할 수 것이라고?

해결법

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

    1.시험:

    시험:

    INSERT INTO table1 ( column1 )
    SELECT  col1
    FROM    table2  
    

    이 표준 ANSI SQL과 어떤 DBMS에서 작동해야

    그것은 확실히 작동 :

  2. ==============================

    2.클로드 Houle의 대답은 : 잘 작동합니다, 당신은 또한뿐만 아니라 여러 열 및 기타 데이터를 가질 수 있습니다 :

    클로드 Houle의 대답은 : 잘 작동합니다, 당신은 또한뿐만 아니라 여러 열 및 기타 데이터를 가질 수 있습니다 :

    INSERT INTO table1 ( column1, column2, someInt, someVarChar )
    SELECT  table2.column1, table2.column2, 8, 'some string etc.'
    FROM    table2
    WHERE   table2.ID = 7;
    

    사람들은 적용되어야한다, 그래서 난 단지, 액세스, / 익스프레스, MySQL은,과 PostgreSQL / 2005 2000 SQL이 구문을 사용했습니다. 또한 sqlite3를 함께 작동합니다.

  3. ==============================

    3.내가 sqlite3를 다음 사항 않은 다른 테이블에서 다중 값 INSERT에서 하나 개의 값을 얻으려면 :

    내가 sqlite3를 다음 사항 않은 다른 테이블에서 다중 값 INSERT에서 하나 개의 값을 얻으려면 :

    INSERT INTO column_1 ( val_1, val_from_other_table ) 
    VALUES('val_1', (SELECT  val_2 FROM table_2 WHERE val_2 = something))
    
  4. ==============================

    4.모두 대답은 내가 특별히 인포믹스에서 잘 동작을보고, 기본적으로 표준 SQL이다. 즉, 표기법입니다 :

    모두 대답은 내가 특별히 인포믹스에서 잘 동작을보고, 기본적으로 표준 SQL이다. 즉, 표기법입니다 :

    INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
    

    나는 모든 DBMS를 기대, 인포믹스와 함께 잘 작동합니다. (5 년 이상 전에 따라하면이 MySQL을 항상 지원하지 않았다 물건의 종류이며, 지금이 표준 SQL 구문의 종류와, AFAIK, 그것은이 표기법에 대한 확인을 작동합니다 대한 상당한 지원을하고있다.) 열 목록 선택적이지만 SELECT 결과의 첫 번째 열에 열 목록이없는 등 홈팀 열에 들어가 있도록 순차적 대상 항목을 나타내고, 선택 결과의 첫 번째 열에 들어가는 목표 테이블의 첫 번째 열.

    어떤 시스템 간의 다를 수 있습니다 서로 다른 데이터베이스의 테이블을 식별하는 데 사용되는 표기법 - 표준이 간 데이터베이스에 대해 할 말이 아무것도 작업 (혼자 간 DBMS하자)이 없습니다. 인포믹스를 사용하면 테이블을 식별하기 위해 다음과 같은 표기법을 사용할 수 있습니다 :

    [dbase[@server]:][owner.]table
    

    즉, 선택적으로는 현재 서버에없는 데이터베이스의 경우, 옵션 소유자가 따랐다 호스트가 점하는 서버, 그리고 마지막으로 실제 테이블 이름을 식별 데이터베이스를 지정할 수 있습니다. 표준 SQL은 인포믹스 소유자 부르는 대한 용어 스키마를 사용합니다. 따라서, 인포믹스에서 다음 표기법의 테이블을 식별 할 수 :

    table
    "owner".table
    dbase:table
    dbase:owner.table
    dbase@server:table
    dbase@server:owner.table
    

    일반적으로 소유자가 인용 할 필요가 없습니다; 그것은 대소 문자를 구분된다 - 당신이 사용 따옴표를 할 경우, 당신은 소유자 이름 철자가 정확 얻을 필요가있다. 그건:

    someone.table
    "someone".table
    SOMEONE.table
    

    모두 같은 테이블을 식별합니다. 인포믹스으로, 소유자 이름은 일반적으로 대문자 (인포믹스는 예외)로 변환됩니다 MODE ANSI 데이터베이스와 가벼운 합병증이있다. 즉 (일반적으로 사용되지 않음), 당신이 쓸 수있는 MODE ANSI 데이터베이스입니다 :

    CREATE TABLE someone.table ( ... )
    

    시스템 카탈로그에 소유자 이름이 아니라 '사람'보다는 '누군가'가 될 것입니다. 당신이 따옴표 소유자 이름을 묶으 경우, 분리 ID와 같은 역할을합니다. 표준 SQL로 구분 된 식별자가 많은 장소를 사용할 수 있습니다. 인포믹스와 함께, 당신은 단지 소유자 이름 주위에 사용할 수 있습니다 - 다른 상황에서, 인포믹스 오히려 문자열과 구분 식별자와 같은 2 인용 문자열로 단일 인용 문자열을 분리보다, 문자열로 모두 인용 - 단일 및 이중 인용 문자열을 처리합니다. (물론, 단지 완성도, 거기에 환경 변수, DELIMIDENT는,이 설정 될 수있다 - 값으로,하지만 Y는 가장 안전 -. 항상 따옴표 서라운드 구분 식별자와 작은 따옴표 항상 서라운드 문자열을 표시하기)

    참고 MS SQL 서버는 대괄호 [구분 된 식별자] 사용을 관리하는. 그것은 나에게 이상한보고, 확실히 SQL 표준의 일부가 아닙니다.

  5. ==============================

    5.우리가 (이 예를 하나에) 다른 테이블에서 불과 몇 기록을 할 때, 첫 번째 대답에 뭔가를 추가하려면 :

    우리가 (이 예를 하나에) 다른 테이블에서 불과 몇 기록을 할 때, 첫 번째 대답에 뭔가를 추가하려면 :

    INSERT INTO TABLE1
    (COLUMN1, COLUMN2, COLUMN3, COLUMN4) 
    VALUES (value1, value2, 
    (SELECT COLUMN_TABLE2 
    FROM TABLE2
    WHERE COLUMN_TABLE2 like "blabla"),
    value4);
    
  6. ==============================

    6.데이터베이스의 대부분은 기본 구문에 따라,

    데이터베이스의 대부분은 기본 구문에 따라,

    INSERT INTO TABLE_NAME
    SELECT COL1, COL2 ...
    FROM TABLE_YOU_NEED_TO_TAKE_FROM
    ;
    

    내가 즉이 구문에 따라 사용한 모든 데이터베이스, DB2, SQL 서버, PostgreSQL의 MY SQL,

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

    7.대신 INSERT 쿼리 값 부분의 바로 아래로 SELECT 쿼리를 사용합니다.

    대신 INSERT 쿼리 값 부분의 바로 아래로 SELECT 쿼리를 사용합니다.

    INSERT INTO table1 ( column1 , 2, 3... )
    SELECT col1, 2, 3... FROM table2
    
  8. ==============================

    8.두 선택 하위 쿼리에 삽입을 위해 접근한다.

    두 선택 하위 쿼리에 삽입을 위해 접근한다.

    하나의 행과 함께 SELECT 부질 복귀 결과 1. 접근.

    INSERT INTO <table_name> (<field1>, <field2>, <field3>) 
    VALUES ('DUMMY1', (SELECT <field> FROM <table_name> ),'DUMMY2');
    

    이 경우, 등 AVG SUM, MAX, 같은 조건 또는 SQL 집계 함수는 그렇지 않으면 오류가 발생합니다 WHERE를 기반으로 SELECT 하위 쿼리 반환에게 결과의 한 행을 가정

    여러 행으로 SELECT 하위 쿼리 결과를 리턴 2. 접근.

    INSERT INTO <table_name> (<field1>, <field2>, <field3>) 
    SELECT 'DUMMY1', <field>, 'DUMMY2' FROM <table_name>;
    

    두 번째 방법은 두 경우에 작동합니다.

  9. ==============================

    9.이것은 당신이 SELECT 파트의 모든 열에 대한 값을 제공하는 경우 일부에 INSERT의 열을 지정하지 않고 수행 할 수 있습니다.

    이것은 당신이 SELECT 파트의 모든 열에 대한 값을 제공하는 경우 일부에 INSERT의 열을 지정하지 않고 수행 할 수 있습니다.

    하자 말의 표는 두 개의 열이 있습니다. 이 쿼리는 작동합니다 :

    INSERT INTO table1
    SELECT  col1, col2
    FROM    table2
    

    이 않을까요 작업 (COL2에 대한 값을 지정하지 않은) :

    INSERT INTO table1
    SELECT  col1
    FROM    table2
    

    나는 MS SQL 서버를 사용하고 있습니다. 나는 어떻게 다른 RDMS 작업을 모른다.

  10. ==============================

    10.이것은 선택과 값을 사용하여 또 다른 예이다 :

    이것은 선택과 값을 사용하여 또 다른 예이다 :

    INSERT INTO table1(desc, id, email) 
    SELECT "Hello World", 3, email FROM table2 WHERE ...
    
  11. ==============================

    11.테이블 열 서열이 알려진 단순 삽입 :

    테이블 열 서열이 알려진 단순 삽입 :

        Insert into Table1
        values(1,2,...)
    

    간단한 삽입 대한 언급 칼럼 :

        Insert into Table1(col2,col4)
        values(1,2)
    

    테이블 (#의 표 2)의 선택된 열 번호가 삽입 테이블 동등한 일괄 삽입 (표 1)

        Insert into Table1 {Column sequence}
        Select * -- column sequence should be same.
           from #table2
    

    당신이 테이블 (표 1)의 원하는 컬럼으로 만 삽입 할 대량 삽입 :

        Insert into Table1 (Column1,Column2 ....Desired Column from Table1)  
        Select Column1,Column2..desired column from #table2
           from #table2
    
  12. ==============================

    12.그냥 INSERT에 SELECT 절에 대한 괄호를 사용합니다. 이 같은 예를 들어 :

    그냥 INSERT에 SELECT 절에 대한 괄호를 사용합니다. 이 같은 예를 들어 :

    INSERT INTO Table1 (col1, col2, your_desired_value_from_select_clause, col3)
    VALUES (
       'col1_value', 
       'col2_value',
       (SELECT col_Table2 FROM Table2 WHERE IdTable2 = 'your_satisfied_value_for_col_Table2_selected'),
       'col3_value'
    );
    
  13. ==============================

    13.여기에 소스가 두 개 이상의 테이블을 사용하여 촬영 한 또 다른 예입니다 :

    여기에 소스가 두 개 이상의 테이블을 사용하여 촬영 한 또 다른 예입니다 :

    INSERT INTO cesc_pf_stmt_ext_wrk( 
      PF_EMP_CODE    ,
      PF_DEPT_CODE   ,
      PF_SEC_CODE    ,
      PF_PROL_NO     ,
      PF_FM_SEQ      ,
      PF_SEQ_NO      ,
      PF_SEP_TAG     ,
      PF_SOURCE) 
    SELECT
      PFl_EMP_CODE    ,
      PFl_DEPT_CODE   ,
      PFl_SEC         ,
      PFl_PROL_NO     ,
      PF_FM_SEQ       ,
      PF_SEQ_NO       ,
      PFl_SEP_TAG     ,
      PF_SOURCE
     FROM cesc_pf_stmt_ext,
          cesc_pfl_emp_master
     WHERE pfl_sep_tag LIKE '0'
       AND pfl_emp_code=pf_emp_code(+);
    
    COMMIT;
    
  14. ==============================

    14.여기에 여러 테이블에서 삽입하는 방법은 다음과 같습니다. 당신이 많은 시나리오에 많은에 매핑 테이블이 곳이 특별한 예는 다음과 같습니다

    여기에 여러 테이블에서 삽입하는 방법은 다음과 같습니다. 당신이 많은 시나리오에 많은에 매핑 테이블이 곳이 특별한 예는 다음과 같습니다

    insert into StudentCourseMap (StudentId, CourseId) 
    SELECT  Student.Id, Course.Id FROM Student, Course 
    WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'
    

    (나는 하나 개의 값보다 더 많은 반환 할 수 있습니다 학생 이름을 일치 실현하지만 당신은 아이디어를 얻을. 이드 이외의 매칭을 필요하다 이드 ID 열 및 알 수없는 경우.)

  15. ==============================

    15.

    INSERT INTO yourtable
    SELECT fielda, fieldb, fieldc
    FROM donortable;
    

    모든 DBMS에이 작품

  16. ==============================

    16.당신이 SELECT * INTO 테이블을 사용하여 모든 열을 삽입 할 경우이 작업을 시도 할 수 있습니다.

    당신이 SELECT * INTO 테이블을 사용하여 모든 열을 삽입 할 경우이 작업을 시도 할 수 있습니다.

    SELECT  *
    INTO    Table2
    FROM    Table1;
    
  17. ==============================

    17.실제로 2008 SQL Server에서 다음을 선호합니다 :

    실제로 2008 SQL Server에서 다음을 선호합니다 :

    SELECT Table1.Column1, Table1.Column2, Table2.Column1, Table2.Column2, 'Some String' AS SomeString, 8 AS SomeInt
    INTO Table3
    FROM Table1 INNER JOIN Table2 ON Table1.Column1 = Table2.Column3
    

    그것은 삽입 () 세트를 추가하는 단계를 제거, 당신은 값이 표에 갈 선택할 그냥.

  18. ==============================

    18.이것은 나를 위해 일한 :

    이것은 나를 위해 일한 :

    insert into table1 select * from table2
    

    문장은 오라클의에서 조금 다릅니다.

  19. ==============================

    19.Microsoft SQL Server의 경우, 나는 MSDN에서 제공하는 구문을 해석하는 학습을 권장합니다. 구글이 구문을 찾기 위해 그 어느 때보 다 쉬워졌습니다.

    Microsoft SQL Server의 경우, 나는 MSDN에서 제공하는 구문을 해석하는 학습을 권장합니다. 구글이 구문을 찾기 위해 그 어느 때보 다 쉬워졌습니다.

    이 특별한 경우를 위해, 시도

    첫 번째 결과는 http://msdn.microsoft.com/en-us/library/ms174335.aspx 될 것입니다

    예 아래로 스크롤 (이하 "SELECT를 사용하여 다른 테이블에서 데이터를 삽입 할 수있는 옵션을 실행") 당신이 어려운 페이지 상단에 주어진 구문을 해석하는 찾을 경우입니다.

    [ WITH <common_table_expression> [ ,...n ] ]
    INSERT 
    {
            [ TOP ( expression ) [ PERCENT ] ] 
            [ INTO ] 
            { <object> | rowset_function_limited 
              [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
            }
        {
            [ ( column_list ) ] 
            [ <OUTPUT Clause> ]
            { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ] 
            | derived_table       <<<<------- Look here ------------------------
            | execute_statement   <<<<------- Look here ------------------------
            | <dml_table_source>  <<<<------- Look here ------------------------
            | DEFAULT VALUES 
            }
        }
    }
    [;]
    

    이것은이 가능한 다른 RDBMS에 적용해야합니다. IMO 모든 제품에 대한 모든 구문을 기억하고 아무 문제가 없었다.

  20. ==============================

    20.

    INSERT INTO FIRST_TABLE_NAME (COLUMN_NAME)
    SELECT  COLUMN_NAME
    FROM    ANOTHER_TABLE_NAME 
    WHERE CONDITION;
    
  21. ==============================

    21.

    select *
    into tmp
    from orders
    

    TMP가 존재하지 않는 경우에만 외모 좋은,하지만 작업 (IT 및 채우기를 작성합니다). (SQL 단절)

    기존 임시 테이블에 삽입하려면 :

    set identity_insert tmp on
    
    insert tmp 
    ([OrderID]
          ,[CustomerID]
          ,[EmployeeID]
          ,[OrderDate]
          ,[RequiredDate]
          ,[ShippedDate]
          ,[ShipVia]
          ,[Freight]
          ,[ShipName]
          ,[ShipAddress]
          ,[ShipCity]
          ,[ShipRegion]
          ,[ShipPostalCode]
          ,[ShipCountry] )
          select * from orders
    
    set identity_insert tmp off
    
  22. ==============================

    22.가장 좋은 방법은 다른 테이블에서 여러 레코드를 삽입합니다.

    가장 좋은 방법은 다른 테이블에서 여러 레코드를 삽입합니다.

    INSERT  INTO dbo.Users
                ( UserID ,
                  Full_Name ,
                  Login_Name ,
                  Password
                )
                SELECT  UserID ,
                        Full_Name ,
                        Login_Name ,
                        Password
                FROM    Users_Table
                (INNER JOIN / LEFT JOIN ...)
                (WHERE CONDITION...)
                (OTHER CLAUSE)
    
  23. ==============================

    23.여러 행을 삽입하는 INSERT의 VALUES 경로를가는 경우에, 그래서, 괄호를 사용하여 세트로 값을 구분해야합니다 :

    여러 행을 삽입하는 INSERT의 VALUES 경로를가는 경우에, 그래서, 괄호를 사용하여 세트로 값을 구분해야합니다 :

    INSERT INTO `receiving_table`
      (id,
      first_name,
      last_name)
    VALUES 
      (1002,'Charles','Babbage'),
      (1003,'George', 'Boole'),
      (1001,'Donald','Chamberlin'),
      (1004,'Alan','Turing'),
      (1005,'My','Widenius');
    

    그렇지 않으면 MySQL은 "열 수가 1 행에서 값의 수를 일치하지 않습니다", 당신은 마침내 그것에 대해 무엇을 알아낼 때 사소한 게시물을 작성 끝낼 것을 객체.

  24. ==============================

    24.클로드 말했듯이 인포믹스에서는 작동 :

    클로드 말했듯이 인포믹스에서는 작동 :

    INSERT INTO table (column1, column2) 
    VALUES (value1, value2);    
    
  25. from https://stackoverflow.com/questions/25969/insert-into-values-select-from by cc-by-sa and MIT license