Chave primária de incremento automático em CREATE TABLE… AS SELECT

12

Criei tabela usando uma consulta de seleção complicada via CREATE TABLE ... AS SELECT.... Como posso adicionar uma chave primária de incremento automático nesta consulta?

Por exemplo:

create table `user_mv` select `user`.`firstname` as 
   `firstname`,
   `user`.`lastname` as `lastname`,
   `user`.`lang` as `lang`,
   `user`.`name` as `user_name`,
   `group`.`name` as `group_name`
from `user`
  inner join `user_groups` on (`user`.`user_id`=`user_groups`.`user_id`)
  left  join `group` on (`group`.`group_id`=`user_groups`.`group_id`)
where `user`.`lang`=`group`.`lang` 

Esta consulta cria uma tabela que contém firstname, lastname, lang, username, group_namecolunas. Eu quero que ele também tenha uma idcoluna que é uma chave primária de incremento automático.

Existe alguma maneira de fazer isso alterando esta consulta? Eu sei que posso fazer isso alterando a tabela depois de executar esta consulta, mas se houver alguma maneira de fazer isso diretamente na create tableinstrução, eu gostaria de saber como fazer isso.

Arash Mousavi
fonte

Respostas:

11
CREATE TABLE `user_mv` (id INT AUTO_INCREMENT PRIMARY KEY) SELECT `user`.`firstname` as 
   `firstname`,
   `user`.`lastname` as `lastname`,
   `user`.`lang` as `lang`,
   `user`.`name` as `user_name`,
   `group`.`name` as `group_name`
from `user`
  inner join `user_groups` on (`user`.`user_id`=`user_groups`.`user_id`)
  left  join `group` on (`group`.`group_id`=`user_groups`.`group_id`)
where `user`.`lang`=`group`.`lang`;

Contanto que você não tenha uma coluna 'id' na sua SELECT, isso parece fazer exatamente o que você deseja. As colunas na seleção serão anexadas à direita das colunas que você declara.

http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (também nas versões anteriores).

Michael - sqlbot
fonte