Autoinkrementacja klucza podstawowego w CREATE TABLE… AS SELECT

12

Utworzyłem tabelę za pomocą skomplikowanego zapytania select via CREATE TABLE ... AS SELECT.... Jak mogę dodać klucz podstawowy autoinkrementacji w tym zapytaniu?

Na przykład:

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` 

Ta kwerenda tworzy tabelę zawierającą firstname, lastname, lang, username, group_namekolumny. Chcę, aby zawierała również idkolumnę, która jest kluczem podstawowym autoinkrementu.

Czy można to zrobić, zmieniając to zapytanie? Wiem, że mogę to zrobić, zmieniając tabelę po wykonaniu tego zapytania, ale jeśli istnieje sposób, aby to zrobić bezpośrednio w create tableinstrukcji, chciałbym wiedzieć, jak to zrobić.

Arash Mousavi
źródło

Odpowiedzi:

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

Dopóki nie masz kolumny „id” SELECT, wydaje się, że robi dokładnie to, co chcesz. Kolumny w zaznaczeniu zostaną dołączone po prawej stronie deklarowanych kolumn.

http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (również w poprzednich wersjach).

Michael - sqlbot
źródło