我想创建一个具有旧表属性且没有重复项的新表。我想做这样的事情:
CREATE TABLE New_Users LIKE Old_Users,
AS
(SELECT * FROM Old_Users GROUP BY ID) ;
但上述方法不起作用。任何人都可以修改它来工作吗?
我想创建一个具有旧表属性且没有重复项的新表。我想做这样的事情:
CREATE TABLE New_Users LIKE Old_Users,
AS
(SELECT * FROM Old_Users GROUP BY ID) ;
但上述方法不起作用。任何人都可以修改它来工作吗?
你的尝试并没有那么糟糕。你必须这样做LIKE
,是的。
在手册中它说:
使用 LIKE 根据另一个表的定义创建一个空表,包括在原始表中定义的任何列属性和索引。
所以你也是:
CREATE TABLE New_Users LIKE Old_Users;
然后你插入
INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;
但是你不能在一个声明中做到这一点。
基于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);
对于 MySQL,您可以这样做:
CREATE TABLE New_Users SELECT * FROM Old_Users group by ID;
CREATE TABLE new_table LIKE old_table;
或者你可以用这个
CREATE TABLE new_table as SELECT * FROM old_table WHERE 1 GROUP BY [删除重复项的列];
您可以使用以下查询来创建表并将不同的值插入到该表中:
Select Distinct Column1, Column2, Column3 into New_Users from Old_Users