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ć.

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.