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
ステートメントでこれを直接行う方法がある場合は、その方法を知りたいです。
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`;
SELECT
に「id」列がない限り、これはまさに望みどおりの動作をするように見えます。選択内の列は、宣言した列の右側に追加されます。
http://dev.mysql.com/doc/refman/5.6/en/create-table-select.html (以前のバージョンでも)。