2012-04-23 68 views
0

问题:

是否有可能在两个或多个现有表格中创建一个表格?从两个或多个现有表格创建一个新表格(MySQL)

详情:

我可以创建一个表像这样:

CREATE TABLE IF NOT EXISTS USERNAME (AGE INT NOT NULL) 
CREATE TABLE IF NOT EXISTS USERAGE (NAME VARCHAR(100) NOT NULL) 
CREATE TABLE IF NOT EXISTS USER LIKE USERNAME LIKE USERAGE; 

我不能让的Reference Manual正面或反面:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 
{ LIKE old_tbl_name | (LIKE old_tbl_name) } 

是否尾随(LIKE old_tbl_name)意味着1或更多出现LIKE old_tbl_name

如果可能,那么同名列或两个主ID会发生什么?

编辑:我想利用现有的表的模式来定义一个新表,试图填充一个新表与现有表的内容。

+0

你只是试图使用现有表的模式来定义新表,或者是否希望用现有表的内容填充新表?对于后者,可以使用MySQL的['CREATE TABLE ... SELECT'](http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html)语法。您提到的CREATE TABLE ... LIKE语法将复制现有表的模式而不包含其任何数据,但您只能指定一个这样的旧表(您引用的括号中的尾随版本仅允许可选的括号放在'LIKE'子句的周围)。 – eggyal 2012-04-23 09:52:26

+0

@eggyal我向你澄清了这个问题。 – puk 2012-04-23 09:54:47

回答

4

如何:

CREATE TABLE IF NOT EXISTS USER SELECT * FROM USERNAME, USERAGE WHERE FALSE; 

可以进一步的SELECT关键字之前,指定新表中需要任何索引或重命名列/选择上的SELECT右侧某个子集和往常一样:

CREATE TABLE IF NOT EXISTS USER (PRIMARY KEY(UNAME)) SELECT NAME AS UNAME -- etc 

如果要合并所有同名的列,只需在SELECT中使用NATURAL JOIN即可。

查看CREATE TABLE ... SELECT了解更多信息。

+0

所以这基本上从多个表中复制一组空行? – puk 2012-04-23 10:02:54

+0

是的,但它将使用结果(空)记录集中的列名和数据类型。 – eggyal 2012-04-23 10:03:28

+0

够好。谢谢 – puk 2012-04-23 10:13:19

相关问题