web-dev-qa-db-ja.com

INSERTクエリを使用して、あるテーブルから別のテーブルに行をコピーする

158列と22,000行のテーブルがあり、ユーザーからのWHERE条件に基づいて動的に値を挿入する別の空のテーブルがあります。 SELECTクエリは次のようになります。

SELECT * FROM mygrist_tables WHERE suic_att> = 5 AND gender = 'M'

これにより、約9,000件のレコードが返されます(たとえば)。これらのレコードを別のテーブル(このフィルター処理されたデータのみ)に挿入します。出来ますか? INSERTクエリがどのように見えるか、158のすべての列を含む別のテーブルを作成する必要があるのか​​、INSERTクエリでこれらの158の列をすべて動的に作成するのかについて、誰か教えてもらえますか?また、ビューを使用してこれを行うことができますか、テーブルが不可欠ですか?前もって感謝します!

12

上記のSELECTステートメントとINSERTを実行して、存在しない新しいテーブルにしたいようです。もしそうなら、これは動作するはずです:

SELECT * INTO YourNewTable
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

YourNewTableが既に存在すると仮定すると、INSERT INTOを実行する必要があります。

INSERT INTO YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

オプションで、同じではない列を指定する必要がある場合があります。

[〜#〜] edit [〜#〜]-コメントを読み直し、DBがMySQLであることを認識し、 SQLステートメントから新しいテーブルを作成するには、次を使用する必要があります。

CREATE TABLE YourNewTable
SELECT *
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M';

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

24
sgeddes

SELECT INTO構文を使用できます

SELECT * 
INTO MyNewTable
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'

ただし、そのような既存のテーブルに挿入することはできません。テーブルが既に存在する場合は、使用します

INSERT INTO MyOldTable
([LIST OUT YOUR COLUMNS HERE])
SELECT [LIST OUT YOUR COLUMNS HERE] 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'
5
rbedger