我想创建一个包含旧表属性且没有重复项的新表。我想做这样的事情:
CREATE TABLE New_Users LIKE Old_Users,
AS
(SELECT * FROM Old_Users GROUP BY ID) ;
但上述情况并不奏效。任何人都可以修改它吗?
答案 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