mysql :: in Tabelle einfügen, Daten aus einer anderen Tabelle?

186

Ich habe mich gefragt, ob es eine Möglichkeit gibt, dies nur in SQL zu tun:

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);

Hinweis: q1 würde ungefähr 30.000 Zeilen zurückgeben.

Gibt es eine Möglichkeit, das, was ich oben versuche, in Straight SQL zu tun? Um die Daten direkt aus einer Tabelle (im Grunde eine Rohdatentabelle) zu ziehen und in eine andere Tabelle (im Grunde eine verarbeitete Datentabelle) einzufügen?

Hagelholz
quelle

Antworten:

400
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'
zerkms
quelle
1
@InSane: 1) Geben Sie eine Antwort 2) Korrigieren Sie die Formatierung der Frage. Verpassen Sie nicht die Bestellung beim nächsten Mal ;-)
Zerkms
ha ha :-) yup..ich habe es nie geschafft, meine Prioritäten zu sortieren! :-D
Jagmag
1
Arbeiten! +1 Perfekt und sehr schnell! Danke Kumpel. Musste nur Klammern aus SELECT-Feldern entfernen ...
Jemand
@zerkms; Funktionieren Trigger mit dieser INSERT INTO ... SELECTAnweisung?
Haccks
2
@haccks Ich glaube das gleiche, als ob es nur ein "normaler" wäreINSERT
zerkms
30

für die ganze Reihe

in xyz einfügen select * from xyz2 where id = "1";

für ausgewählte Spalte

in xyz einfügen (t_id, v_id, f_name) wähle t_id, v_id, f_name aus xyz2 wobei id = "1";
Lokesh Deshmukh
quelle
1
Der gesamte Zeilenansatz schlägt fehl, wenn bereits ein Datensatz mit einem passenden Primärschlüssel vorhanden ist.
HotN
Haben Sie eine Lösung gefunden? <Der Ansatz für die gesamte Zeile schlägt fehl, wenn bereits ein Datensatz mit einem passenden Primärschlüssel vorhanden ist.>
Shivdhwaj Pandey
10

Mit zerkms beantwortet ist die richtige Methode. Wenn jedoch jemand mehr zusätzliche Spalten in die Tabelle einfügen möchte, können Sie diese wie folgt abrufen:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, '[email protected]', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

In der obigen Abfrage gibt es 2 zusätzliche Spalten mit dem Namen email & current_time .

IamMHussain
quelle
2
Was wäre, wenn ich drei Datenzeilen mit denselben Werten aus den ausgewählten, aber unterschiedlichen Werten für die hinzugefügten 'zusätzlichen' Spalten wie E-Mail und current_time einfügen möchte?
xxstevenxo
4
INSERT INTO Table1 SELECT * FROM Table2
Mher Arsh
quelle
Dies ist eine Antwort von sehr geringer Qualität. Außerdem wird im Gegensatz zur akzeptierten Antwort nicht einmal versucht, sich auf die in der Frage enthaltenen Informationen zu beziehen.
Mike
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

Analyse

Wir können die obige Abfrage verwenden, wenn wir Daten von einer Tabelle in eine andere Tabelle in MySQL kopieren möchten

  1. Hier sind Quell- und Zieltabelle gleich, wir können auch unterschiedliche Tabellen verwenden.
  2. Nur wenige Spalten, die wir nicht kopieren, sind style_id und is_deleted, daher haben wir sie aus einer anderen Tabelle fest codiert ausgewählt
  3. Die in der Quelle verwendete Tabelle enthält auch ein Auto-Inkrement-Feld, sodass wir diese Spalte verlassen haben und sie bei Ausführung der Abfrage automatisch eingefügt wird.

Ausführungsergebnisse

1 Abfragen ausgeführt, 1 Erfolg, 0 Fehler, 0 Warnungen

Abfrage: In vorläufiges_Bild einfügen (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) auswählen ...

5 Reihe (n) betroffen

Ausführungszeit: 0,385 Sek. Übertragungszeit: 0 Sek. Gesamtzeit: 0,386 Sek

Amit Jain
quelle