web-dev-qa-db-fra.com

Incrémentation automatique de la clé primaire dans CREATE TABLE ... AS SELECT

J'ai créé une table à l'aide d'une requête de sélection complexe via CREATE TABLE ... AS SELECT.... Comment puis-je ajouter une clé primaire à incrémentation automatique dans cette requête?

Par exemple:

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` 

Cette requête crée une table qui contient firstname, lastname, lang, username, group_name Colonnes. Je veux qu'il ait également une colonne id qui est une clé primaire à auto-incrémentation.

Existe-t-il un moyen de le faire en modifiant cette requête? Je sais que je peux le faire en modifiant la table après avoir exécuté cette requête, mais s'il existe un moyen de le faire directement dans le create table déclaration, j'aimerais savoir comment faire.

12
Arash Mousavi
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`;

Tant que vous n'avez pas de colonne 'id' dans votre SELECT, cela semble faire exactement ce que vous voulez. Les colonnes de la sélection seront ajoutées à droite des colonnes que vous déclarez.

http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (également dans les versions précédentes).

11
Michael - sqlbot