【MySQL】カラムのデータを同一テーブルの別カラムにコピーするクエリ
概要
※MySQL前提で話を進めます
あるテーブルのAカラムのデータを同じテーブルのBカラムにコピーしたいということがありました。
どうやらサブクエリを使えばいけるみたいなのでやってみます。
サブクエリ
その前にサブクエリが何かというと
サブクエリは「副問い合わせ」とも呼ばれ、SQL文の中にSELECT文を埋め込み、抽出条件として利用することを可能としています。
つまり、SELECT文などに入れ子として組み込んで、抽出したデータを元々のSELECT文等の条件式として使えるみたいな感じのやつですね。
実践
今回以下のキャプチャにあるテーブルを使用します。 このテーブルのidが6〜10のdirectorカラムにあるデータをdetailカラムにコピーします。 ※データベースはMySQLを使用しています。
クエリは以下になります
UPDATE products as p1, ( SELECT id, director FROM products WHERE id BETWEEN 6 AND 10 ) as p2 SET p1.detail = p2.director WHERE p1.id = p2.id;
これを実行すると以下のキャプチャのようにデータがコピーされています。
解説
コピーする(UPDATE)側がproductsのp1、コピーするデータを持ってくる側(副問合せ)をp2としてテーブルを設定します。
副問合せ側ではidが6〜10のidとdirectroカラムを取得しています。 idを取得している理由としてはWHERE文で使うためです。
コピーする条件としてデータを持ってくる側(p2)と同じidのp1のレコードに対してコピーします。(今回はidが6〜10のレコード)
この時WHERE文を設定しないと空のデータをコピーしてしまいます。
idがp1の6〜10のレコードのdetailカラムにデータを持ってくる側のp2のdirectorカラムのデータをコピーします。
自分としては同一テーブルだけど別テーブルのデータをコピーしているイメージですね。
図解すると以下のようになります。
カラムのデータを同じテーブルの別カラムにコピーすることなんて普通やらないですから検索してもなかなか出てこないのと、普段クエリを書く機会があまりないから結構苦戦してしまいましたね。。。