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;

しかし、1つのステートメントでそれを行うことはできません。

于 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;

またはuはこれを使用できます

CREATE TABLE new_table as SELECT * FROM old_table WHERE 1 GROUPBY[重複を削除する列];

于 2017-11-21T14:16:00.780 に答える
0

以下のクエリを使用してテーブルを作成し、このテーブルに個別の値を挿入できます。

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