MySQLでwhere句を使ってカラム指定でデータをコピーする方法
2024/02/22
MySQLで大量のデータを保存しているテーブルがあり、そのデータを絞った上で尚且つカラムを指定して他のテーブルにコピーしたかった。ダンプしてインサートしようかと思って少し試したところデータ量が多いからか時間がかかりすぎた。何か方法は無いか探したところ簡単にコピーできる方法があった。
SQL文
INSERT INTO
コピー先のテーブル名
(カラム, カラム)
SELECT
(カラム, カラム)
FROM
コピー元のテーブル名
WHERE
WHERE区を適当に
例えば以下条件の場合は、
- テーブルAからテーブルBにコピー
- カラムはidとnameを入れたい
- テーブルBには新カラムのコピー日時をregist_dateカラムとして入れたい
- WHERE句はテーブルAのdateカラムで2016-01-01から2016-01-31までを指定
以下のような形になる。
INSERT INTO
table_b
(id, name, regist_date)
SELECT
(id, name, NOW())
FROM
table_a
WHERE
date BETWEEN '2016-01-01' AND '2016-01-31'
WHERE句はさらにANDとかで絞込み検索が可能。
その他
絞込み検索をダンプしてインポートする方法だと100万件ほどのデータで1時間ほどかかったが、この方法だと5分もかからずに処理できた。
関連記事
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...
-
-
MySQLでカラム数の異なるテーブルを結合する(UNION)
MySQLでカラム数の異なるテーブル同士をUNIONで結合させたかった。ただ、何 ...
-
-
WordPressでデータベース接続確立エラー発生時の対応方法
WordPressで「データベース接続確立エラー」というエラー表示がされた。大抵 ...
-
-
SQLで同じ値を複数のレコードに対してUPDATE
やりたかった事は、複数のレコードに対して 同じ値に更新したいというもの。 $sq ...
-
-
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...