Вопрос по mysql – СОЗДАЙТЕ ТАБЛИЦУ, КАК А1, А2

47

Я хочу создать новую таблицу со свойствами старой таблицы и без дубликатов. Я хочу сделать что-то вроде этого:

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

Но вышесказанное не работает. Кто-нибудь может изменить его для работы?

Помните, что используяLIKE также заставит новую таблицу иметь аналогичные индексы. Nav

Ваш Ответ

5   ответов
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);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Jigberto
1

CREATE TABLE New_Users   SELECT * FROM Old_Users group by ID;
Error: User Rate Limit Exceededdev.mysql.com/doc/refman/5.0/en/create-table-select.htmlError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Jigberto
85

LIKE, да.

вруководство это говорит:

Use LIKE to create an empty table based on the definition of another table, including any column attributes and indexes defined in the original table.

Итак, вы делаете:

CREATE TABLE New_Users  LIKE Old_Users;

Затем вы вставляете с

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;

Но вы не можете сделать это в одном заявлении.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

или ты можешь использовать это

CREATE TABLE new_table as SELECT * FROM old_table WHERE 1 GROUP BY [столбец для удаления дубликатов по];

0

чтобы создать таблицу и вставить различные значения в эту таблицу:

Select Distinct Column1, Column2, Column3 into New_Users from Old_Users

Похожие вопросы