2012-02-08 112 views
1

我有8个表,并且所有表具有完全相同的结构。在每个表的第1列是ID,它的INT,主键,自动递增合并具有不同信息的完全相同的MySQL表

会正确的事情是创建一个第九表具有相同的结构等8个,然后INSERT * FROM table1, table2, table3, table4, table5, table6, table7 table8 INTO table9 EXCEPT ID

我真的很不确定如何去做这件事。在PHPMyAdmin和MySQL Workbench的帮助下,我花了整整一天的时间从15年的Excel文件中提取数据并手动创建表格。

所以任何提示把这个任务交给了迅速结束,将不胜感激(你的SQL家伙没有得到足够的报酬)

+1

你试过了吗?你可能一次只能做一个,但这听起来像是一种合理的方式。我相信你想要的语法被称为[Insert-Select](http://dev.mysql.com/doc/refman/5.0/en/insert-select.html)。 – 2012-02-08 06:13:18

回答

2

您正在寻找Insert-Select statementUNION statement

INSERT INTO table9(all, coma, separated, fields, except, id) 
SELECT all, coma, separated, fields, except, id FROM table1 UNION 
SELECT all, coma, separated, fields, except, id FROM table2 UNION 
... 
SELECT all, coma, separated, fields, except, id FROM table8; 
3

事实上正如Sergey建议的那样,我会选择插入。

但我不会去一个联盟。该联盟文件说:工会

的默认行为是重复的行从结果

你混合不同的表(甚至消除他们的IDS)去除,所以如果你有这样的表1:

id | nonIdField_1 | nonIdField_2, etc 
------------------------------------- 
1 | A   | B 

,这在表2

id | nonIdField_1 | nonIdField_2, etc 
------------------------------------- 
5 | A   | B 

其结果将是:

nonIdField_1 | nonIdField_2, etc 
-------------------------------- 
A   | B 

而且我想你想这个(为了不丢失信息):

nonIdField_1 | nonIdField_2, etc 
-------------------------------- 
A   | B 
A   | B 

所以,你应该使用UNION ALL而不是UNION的。前者不会删除重复项。

希望这会有所帮助。

+0

嗨,这是一个很好的提示,感谢您寻找那个。我一定会看看我是否失去了任何信息。 – Zrb0529 2012-02-08 06:49:50

相关问题