Первичный ключ автоинкремента в CREATE TABLE… AS SELECT

12

Я создал таблицу, используя сложный запрос выбора через CREATE TABLE ... AS SELECT.... Как добавить автоинкрементный первичный ключ в этот запрос?

Например:

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` 

Этот запрос создает таблицу , которая содержит firstname, lastname, lang, username, group_nameстолбцы. Я хочу, чтобы он также имел idстолбец, который является первичным ключом автоинкремента.

Есть ли способ сделать это, изменив этот запрос? Я знаю, что могу сделать это, изменив таблицу после выполнения этого запроса, но если есть какой-либо способ сделать это непосредственно в create tableоператоре, я хотел бы знать, как это сделать.

Араш Мусави
источник

Ответы:

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

Пока у вас нет столбца «id» в вашем SELECT, это, кажется, делает именно то, что вы хотите. Столбцы в списке выбора будут добавлены справа от объявленных вами столбцов.

http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (также в предыдущих версиях).

Майкл - sqlbot
источник