【问题标题】:CREATE TABLE LIKE A1 as A2CREATE TABLE LIKE A1 as A2
【发布时间】:2012-04-13 20:02:58
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,使用LIKE 也会使新表具有相似的索引。

标签: mysql


【解决方案1】:

你的尝试还不错。你必须用LIKE 来做,是的。

manual 中写道:

使用 LIKE 根据另一个定义创建一个空表 表,包括在 原表。

所以你这样做:

CREATE TABLE New_Users  LIKE Old_Users;

然后你插入

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;

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

【讨论】:

  • LIKE 语句应该在括号中:CREATE TABLE New_Users (LIKE Old_Users);
  • 不,没必要。
  • 只是想注意这不会从源表中复制外键。我的副本表中不需要它们,但其他人可能需要。
【解决方案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);

【讨论】:

  • @AshBurlaczenko,查看我在答案中发布的链接,mysql 文档中有很多没有表规范的示例。我可以看到它需要第一个规范才能工作,因为没有数据,但第二个例子将工作,除非他们的文档是错误的。
  • 我需要新表才能拥有与旧表相同的属性
  • 使用第二个例子,然后运行“describe new_users;”,有什么不同?
  • 我现在测试了我有一个可用的 mysql 实例并且两者都可以工作
【解决方案3】:

对于 MySQL,你可以这样做:

CREATE TABLE New_Users   SELECT * FROM Old_Users group by ID;

【讨论】:

  • 嗨,是的,它创建了新表,但我需要这个新表具有与旧表相同的属性。
  • 依赖于 mysql 文档,您不能保留索引、PK 等。但是您可以像 mysql 文档那样定义索引。 dev.mysql.com/doc/refman/5.0/en/create-table-select.html CREATE TABLE ... SELECT 不会自动为您创建任何索引。这样做是为了使语句尽可能灵活。如果你想在创建的表中有索引,你应该在 SELECT 语句之前指定这些:mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
【解决方案4】:

CREATE TABLE new_table LIKE old_table;

或者你可以使用这个

创建表 new_table 为 SELECT * FROM old_table WHERE 1 GROUP BY [删除重复项的列];

【讨论】:

    【解决方案5】:

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

    Select Distinct Column1, Column2, Column3 into New_Users from Old_Users
    

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      相关资源
      最近更新 更多