【发布时间】:2012-04-13 20:02:58
【问题描述】:
我想创建一个具有旧表属性且没有重复项的新表。我想做这样的事情:
CREATE TABLE New_Users LIKE Old_Users,
AS
(SELECT * FROM Old_Users GROUP BY ID) ;
但上述方法不起作用。任何人都可以修改它来工作吗?
【问题讨论】:
-
请注意,使用
LIKE也会使新表具有相似的索引。
标签: mysql
我想创建一个具有旧表属性且没有重复项的新表。我想做这样的事情:
CREATE TABLE New_Users LIKE Old_Users,
AS
(SELECT * FROM Old_Users GROUP BY ID) ;
但上述方法不起作用。任何人都可以修改它来工作吗?
【问题讨论】:
LIKE 也会使新表具有相似的索引。
标签: mysql
你的尝试还不错。你必须用LIKE 来做,是的。
在manual 中写道:
使用 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;
或者你可以使用这个
创建表 new_table 为 SELECT * FROM old_table WHERE 1 GROUP BY [删除重复项的列];
【讨论】:
您可以使用以下查询来创建表并将不同的值插入到该表中:
Select Distinct Column1, Column2, Column3 into New_Users from Old_Users
【讨论】: