mysql ::別のテーブルのデータをテーブルに挿入しますか?


187

純粋にSQLでこれを行う方法があるかどうか私は思っていました:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

注: q1は約30k行を返します。

上記のストレートSQLでしようとしていることを行う方法はありますか?あるテーブル(基本的には生データテーブル)からデータを直接プルして、別のテーブル(基本的には処理されたデータテーブル)に挿入するには、どうすればよいですか。

回答:


401
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'

1
@InSane:1)回答を与える2)質問のフォーマットを修正する 次回は注文をお見逃しなく;-)
zerkms

ハハ:-) yup..i私は私の優先順位を整理することができませんでした!:-D
Jagmag 2010年

1
ワーキング!+1完璧で非常に速い!どうも。SELECTフィールドからかっこを削除する必要がありました...
2013年

@zerkms; トリガーはこのINSERT INTO ... SELECTステートメントで機能しますか?
2016

2
@haccks私はそれが単なる「通常の」ものであるかのように同じだと信じていますINSERT
zerkms

30

行全体

xyzに挿入* from xyz2 where id = "1";

選択した列

xyz(t_id、v_id、f_name)に挿入しますxyz2からt_id、v_id、f_nameを選択しますid = "1";

1
主キーが一致する既存のレコードがすでにある場合、行全体のアプローチは失敗します。
HotN

何か解決策を見つけましたか?<一致する主キーを持つ既存のレコードがすでにある場合、行全体のアプローチは失敗します。>
Shivdhwaj Pandey

10

で答えzerkmsことは正しい方法です。しかし、テーブルにさらに列を挿入しようとしている人がいる場合は、次の方法でそれを取得できます。

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

上記のクエリには、emailcurrent_timeという名前の2つの追加の列があります


2
selectからの値は同じであるが、電子メールやcurrent_timeなどの追加された「追加」列に異なる値を持つ3行のデータを挿入したい場合はどうなりますか?
xxstevenxo 2018

4
INSERT INTO Table1 SELECT * FROM Table2

これは質の低い答えです。さらに、受け入れられた回答とは異なり、質問に含まれる情報に関連することすらありません。
マイク

0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

分析

mysqlで1つのテーブルから別のテーブルにデータをコピーする場合は、上記のクエリを使用できます

  1. ここでは、ソーステーブルと宛先テーブルは同じですが、異なるテーブルを使用することもできます。
  2. style_idis_deletedのようにコピーしていない列がほとんどないため、別のテーブルからハードコーディングした列を選択しました
  3. ソースで使用したテーブルには自動インクリメントフィールドも含まれているため、その列をそのままにしておくと、クエリを実行すると自動的に挿入されます。

実行結果

1クエリ実行、1成功、0エラー、0警告

クエリ:予備画像に挿入(style_id、pre_image_status、file_extension、reviewer_id、uploader_id、is_deleted、last_updated)select ...

影響を受ける5行

実行時間:0.385秒転送時間:0秒合計時間:0.386秒

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.