Clave principal de autoincremento en CREATE TABLE ... AS SELECT

12

Creé la tabla usando una consulta de selección complicada a través de CREATE TABLE ... AS SELECT.... ¿Cómo puedo agregar una clave primaria de autoincremento en esta consulta?

Por ejemplo:

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 crea una tabla que contiene firstname, lastname, lang, username, group_namecolumnas. Quiero que también tenga una idcolumna que sea una clave primaria de autoincremento.

¿Hay alguna manera de hacer esto cambiando esta consulta? Sé que puedo hacerlo modificando la tabla después de ejecutar esta consulta, pero si hay alguna forma de hacerlo directamente en la create tabledeclaración, me gustaría saber cómo hacerlo.

Arash Mousavi
fuente

Respuestas:

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

Mientras no tenga una columna 'id' en su SELECT, esto parece hacer exactamente lo que quiere. Las columnas en la selección se agregarán a la derecha de las columnas que declare.

http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (también en versiones anteriores).

Michael - sqlbot
fuente