Mysql

將源表中的數據插入到具有更多列的目標表中?

  • September 23, 2021

我想用來INSERT INTO SELECT *將數據從源表插入到目標表中,但是我在目標表中添加了一些額外的列。這些列分佈在表格周圍,例如 2 在頂部,2 在底部。

同樣對於插入,我可以在這些列中插入一些預設值,如 null。

SELECT * 選擇col1、col2、col3,如table2中定義的那樣,如果選擇與目標不匹配,則會失敗。

結論是改變選擇:

INSERT INTO table1 
SELECT col1, col2, NULL as col_extra, 'default' as col_extra2, col3, [...] 
FROM table2

未經測試,但應該可以工作

如果目標表的列多於源表,您有一些選擇

  • 為源表缺少的列提供一個值。如果該列是NOT NULL並且缺少DEFAULT
INSERT INTO dest ( foo,bar )
 SELECT foo, 1 FROM src;    -- 1 is a literal, could also be f(foo)
  • 任何一個,

    • 如果目標表中多餘的列有DEFAULT,請使用它。
    INSERT INTO dest ( foo )
      SELECT foo FROM src;
    

    這與更明確的相同,

    INSERT INTO dest ( foo,bar )
      SELECT foo, DEFAULT FROM src;
    
    • 如果列上沒有 a DEFAULT,則該列預設為NULL。這對所有NULLABLE列都有效
    INSERT INTO dest ( foo )
      SELECT foo FROM src;
    

    這與更明確的相同,

    INSERT INTO dest ( foo,bar )
      SELECT foo, null FROM src;
    

引用自:https://dba.stackexchange.com/questions/127366