2012-04-13 2 views
38

중복 된 테이블이 아닌 기존 테이블의 속성을 사용하여 새 테이블을 만들고 싶습니다. 나는 이런 식으로하고 싶다 :A2와 같은 테이블을 생성하십시오.

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

그러나 위의 작동하지 않습니다. 제발, 아무도 그것을 수정할 수 있습니까? 을 바탕으로

+0

'LIKE'을 사용하면 새 테이블도 비슷한 인덱스를 갖게된다는 점에 유의하십시오. – Nav

답변

69

귀하의 시도가 나쁘지 않았다. 네, LIKE으로해야합니다. 그것은 말한다 manual에서

:

사용 등이 원래 테이블에 정의 된 컬럼 속성과 인덱스를 포함하여 다른 테이블의 정의를 기반으로 빈 테이블을 만들 수 있습니다.

그래서 당신이 할 :

CREATE TABLE New_Users LIKE Old_Users; 

은 그럼 당신은

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID; 

에 삽입하지만 당신은 하나 개의 문장에서 그것을 할 수 없습니다.

+0

LIKE 문은 괄호 안에 있어야합니다. CREATE TABLE New_Users (LIKE Old_Users); – Marcao

+0

아니요, 필요하지 않습니다. – fancyPants

+2

맞습니다. 그렇지 않습니다. 죄송합니다. – Marcao

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); 
+0

@AshBurlaczenko, 내가 답변에 게시 된 링크를 살펴보면, 테이블 사양이없는 mysql 문서에 많은 예제가있다. 데이터가 없으므로 첫 번째 사양에 대한 사양이 필요하다는 것을 알 수 있지만 두 번째 예제는 해당 문서가 잘못된 경우가 아니라면 작동합니다. –

+0

이전 테이블 – Jigberto

+0

과 같은 동일한 prorieties를 갖는 새 테이블이 필요하고 두 번째 예제를 사용하고 "describe new_users;"를 실행하십시오. –

1

MySQL을 들어, 이런 식으로 작업을 수행 할 수 있습니다

CREATE TABLE New_Users SELECT * FROM Old_Users group by ID; 
+0

안녕하세요, 새 테이블을 만드는 중입니다.하지만이 새 테이블에 이전 테이블과 같은 prorieties가 있어야합니다. – Jigberto

+0

mysql 문서화에 따라 인덱스, PK 등을 보존 할 수는 없지만 mysql documantation tells와 같은 인덱스를 정의 할 수있다. http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html CREATE TABLE ... SELECT는 자동으로 색인을 생성하지 않습니다. 이는 명세서를 최대한 유연하게 만들기 위해 의도적으로 행해진 것입니다. 생성 된 테이블에서 인덱스를 원한다면 SELECT 문 앞에 다음을 지정해야합니다. mysql> CREATE TABLE 막대 (UNIQUE (n)) SELECT n FROM foo; –

0

CREATE TABLE new_table LIKE old_table;

또는 U이

가 OLD_TABLE FROM SELECT *로 NEW_TABLE CREATE TABLE을 사용 WHERE [하여 중복을 제거하는 열에 의해 1 기;

관련 문제