代码之家  ›  专栏  ›  技术社区  ›  1pluszara

ORACLE:基于单个列值插入多条记录

  •  2
  • 1pluszara  · 技术社区  · 6 年前

    基于列的值( COLUMN_NAME )在表1中,我想在表2中插入3条新记录。 最好的方法是什么?我试过如下,但我不想使用三个查询使用 UNION ALL

    SQL> DROP TABLE TABLE_2
    Table dropped.
    SQL> CREATE TABLE TABLE_2(EMP_ID VARCHAR2(10),VALUE VARCHAR2(10))
    Table created.
    SQL> TRUNCATE TABLE TABLE_2
    Table truncated.
    SQL> INSERT INTO TABLE_2
    (EMP_ID,VALUE)
    WITH TABLE_1 as 
    (
        SELECT '111' AS EMP_ID,'COL1' COLUMN_NAME FROM DUAL
    )
    SELECT EMP_ID,CASE WHEN COLUMN_NAME = 'COL1' THEN 'RICK' END AS VALUE  
    FROM TABLE_1
    UNION ALL
    SELECT EMP_ID,CASE WHEN COLUMN_NAME = 'COL1' THEN 'TOM' END AS VALUE  
    FROM TABLE_1
    UNION ALL
    SELECT EMP_ID,CASE WHEN COLUMN_NAME = 'COL1' THEN 'ADAM' END AS VALUE  
    FROM TABLE_1
    COMMIT
    3 rows created.
    SQL> SELECT * FROM TABLE_2
    
    EMP_ID     VALUE     
    ---------- ----------
    111        RICK      
    111        TOM       
    111        ADAM      
    
    3 rows selected.
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Lukasz Szozda    6 年前

    你可以用 INSERT ALL :

    INSERT ALL 
      INTO TABLE_2(EMP_ID,VALUE) VALUES (EMP_ID, 'Rick')
      INTO TABLE_2(EMP_ID,VALUE) VALUES (EMP_ID, 'Tom')
      INTO TABLE_2(EMP_ID,VALUE) VALUES (EMP_ID, 'Adam')
    SELECT '111' AS EMP_ID,'COL1' COLUMN_NAME FROM DUAL;
    

    db<>fiddle demo