创建表LIKE A1为A2

时间:2012-04-13 20:02:58

标签: mysql

我想创建一个包含旧表属性且没有重复项的新表。我想做这样的事情:

CREATE TABLE New_Users  LIKE Old_Users, 
AS
(SELECT * FROM Old_Users GROUP BY ID) ;

但上述情况并不奏效。任何人都可以修改它吗?

5 个答案:

答案 0 :(得分:89)

你的尝试并没有那么糟糕。你必须使用LIKE,是的。

manual中说:

  

使用LIKE根据另一个的定义创建一个空表   表,包括在中定义的任何列属性和索引   原始表。

所以你这样做:

CREATE TABLE New_Users  LIKE Old_Users;

然后插入

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;

但你不能在一个声明中这样做。

答案 1 :(得分:2)

基于http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html

怎么样:

Create Table New_Users Select * from Old_Users Where 1=2;

如果这不起作用,只需选择一行并在创建后截断:

Create table New_Users select * from Old_Users Limit 1;
Truncate Table New_Users;

编辑:

我注意到你的评论如下需要索引等。试试:

show create table old_users;
#copy the output ddl statement into a text editor and change the table name to new_users
#run the new query
insert into new_users(id,name...) select id,name,... form old_users group by id;

应该这样做。看来你这样做是为了摆脱重复?在这种情况下,您可能希望在id上放置唯一索引。如果它是主键,这应该已经到位了。你可以:

#make primary key
alter table new_users add primary key (id);
#make unique
create unique index idx_new_users_id_uniq on new_users (id);

答案 2 :(得分:1)

对于MySQL,您可以这样做:

CREATE TABLE New_Users   SELECT * FROM Old_Users group by ID;

答案 3 :(得分:0)

CREATE TABLE new_table LIKE old_table;

或者你可以使用这个

CREATE TABLE new_table as SELECT * FROM old_table WHERE 1 GROUP BY [用于删除重复项的列;]

答案 4 :(得分:0)

您可以使用以下查询创建表并将不同的值插入该表:

Select Distinct Column1, Column2, Column3 into New_Users from Old_Users