64

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

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

但上述方法不起作用。任何人都可以修改它来工作吗?

4

5 回答 5

118

你的尝试并没有那么糟糕。你必须这样做LIKE,是的。

手册中它说:

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

所以你也是:

CREATE TABLE New_Users  LIKE Old_Users;

然后你插入

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;

但是你不能在一个声明中做到这一点。

于 2012-07-11T13:18:39.750 回答
3

基于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);
于 2012-04-13T20:09:40.807 回答
1

对于 MySQL,您可以这样做:

CREATE TABLE New_Users   SELECT * FROM Old_Users group by ID;
于 2012-04-13T20:12:31.970 回答
0

CREATE TABLE new_table LIKE old_table;

或者你可以用这个

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

于 2017-11-21T14:16:00.780 回答
0

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

Select Distinct Column1, Column2, Column3 into New_Users from Old_Users
于 2018-12-18T14:33:33.667 回答