Create TableAsSQLステートメントの構文は次のとおりです。
CREATE TABLE table_name [ ( column_name [, ...] ) ] AS select [ * ! ( column_name [, ...] ) ] FROM source_table_name
table_nameを、作成される新しいテーブルの名前に置き換えます。列名はオプションであり、コンマ区切りのリストに名前を含めることで複数の列を指定できます。それ以外の場合、新しいテーブルの構造は、行データとともに、Selectステートメントによって返される列名、タイプ、および列の数に基づきます。列名を指定する場合は、selectによって返されるのと同じ数の列が指定されている必要があることに注意してください。
create table asコマンドの最後にあるselectステートメントは有効である必要があり、AS句の前にあるオプションの列リストの列数と一致する選択されたターゲットの数が含まれています。複数のテーブルからデータを取得する複雑なselectステートメントの場合があります。オプションの列リストが括弧内に指定されている場合、アスタリスク(*)はselectステートメントで使用できなくなります。
たとえば、
CREATE TABLE demo_backup AS SELECT * FROM demo;
上記のSQLステートメントは、デモテーブルのデータと構造(列)を含むdemo_backupという名前の正確なレプリカバックアップテーブルを作成します。
オプションの列リストを指定した場合に発生する可能性のあるエラーは次のとおりです。
エラー:CREATE TABLE /ASSELECTの列数が一致していません
このエラーメッセージが表示された場合、これは、括弧内の列のオプションのリストに、selectステートメントが返す行数とは異なる行数が含まれていることが原因です。指定された列の数が、選択した結果セットから期待される結果と同じであるかどうかを再確認してください。
注一部のデータベースシステムは、元のテーブルで定義された列属性とインデックスを含む、別のテーブルの定義に基づいて空のテーブルを作成するCREATETABLE…LIKE構文をサポートしています。違いは、CREATETABLE…SELECT構文もデータをコピーすることです。