古いテーブルのプロパティを使用して、重複のない新しいテーブルを作成したいと思います。私はこのようなことをしたい:
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;
しかし、1つのステートメントでそれを行うことはできません。
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;
またはuはこれを使用できます
CREATE TABLE new_table as SELECT * FROM old_table WHERE 1 GROUPBY[重複を削除する列];
以下のクエリを使用してテーブルを作成し、このテーブルに個別の値を挿入できます。
Select Distinct Column1, Column2, Column3 into New_Users from Old_Users