Mysql
將源表中的數據插入到具有更多列的目標表中?
我想用來
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;