Autoincrement-Primärschlüssel in CREATE TABLE… AS SELECT

12

Ich habe eine Tabelle mit einer komplizierten Auswahlabfrage über erstellt CREATE TABLE ... AS SELECT.... Wie kann ich dieser Abfrage einen Autoincrement-Primärschlüssel hinzufügen?

Beispielsweise:

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` 

Diese Abfrage erstellt eine Tabelle , die enthält firstname, lastname, lang, username, group_nameSpalten. Ich möchte, dass es auch eine idSpalte gibt, die ein Autoincrement-Primärschlüssel ist.

Gibt es eine Möglichkeit, dies durch Ändern dieser Abfrage zu tun? Ich weiß, dass ich das tun kann, indem ich die Tabelle ändere, nachdem ich diese Abfrage ausgeführt habe, aber wenn es eine Möglichkeit gibt, dies direkt in der create tableAnweisung zu tun, würde ich gerne wissen, wie das geht.

Arash Mousavi
quelle

Antworten:

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

Solange Sie keine 'id'-Spalte in Ihrer haben SELECT, scheint dies genau das zu tun, was Sie wollen. Die Spalten in der Auswahl werden rechts von den von Ihnen deklarierten Spalten angehängt.

http://dev.mysql.com/doc/refman/5.6/de/create-table-select.html (auch in früheren Versionen).

Michael - sqlbot
quelle