mysql :: wstaw do tabeli, dane z innej tabeli?


187

Zastanawiałem się, czy istnieje sposób, aby to zrobić wyłącznie w 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);

Uwaga: q1 zwróci około 30 000 wierszy.

Czy jest jakiś sposób, aby zrobić to, co próbuję powyżej w prostej sql? Aby po prostu wyciągnąć dane bezpośrednio z jednej tabeli (w zasadzie surowej tabeli danych) i wstawić do innej tabeli (w zasadzie przetworzonej tabeli danych)?

Odpowiedzi:


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) udziel odpowiedź 2) popraw formatowanie pytania. Nie przegap następnego zamówienia ;-)
zerkms

ha ha :-) tak .. nigdy nie udało mi się uporządkować moich priorytetów! :-D
Jagmag

1
Pracujący! +1 Idealnie i bardzo szybko! Dzięki stary. Musiałem tylko usunąć nawiasy z pól SELECT ...
Ktoś

@zerkms; Czy wyzwalacze będą działać z tym INSERT INTO ... SELECTzestawieniem?
haccks

2
@haccks Wierzę tak samo, jakby to był tylko „normalny”INSERT
zerkms

30

dla całego rzędu

wstaw do xyz wybierz * z xyz2 gdzie id = "1";

dla wybranej kolumny

wstaw do xyz (t_id, v_id, f_name) wybierz t_id, v_id, f_name z xyz2 gdzie id = "1";

1
Podejście do całego wiersza kończy się niepowodzeniem, jeśli istnieje już rekord z pasującym kluczem podstawowym.
HotN

Znalazłeś jakieś rozwiązanie? <Całe podejście do wiersza kończy się niepowodzeniem, jeśli istnieje już rekord z pasującym kluczem podstawowym.>
Shivdhwaj Pandey

10

Odpowiedź zerkms jest poprawna. Ale jeśli ktoś chce wstawić dodatkową tabelę do tabeli, możesz uzyskać ją z następujących opcji:

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'

W powyższym zapytaniu są 2 dodatkowe kolumny o nazwie e - mail i aktualny czas .


2
Co jeśli chciałbym wstawić trzy wiersze danych o tych samych wartościach z wybranych, ale różnych wartości dla dodanych kolumn „dodatkowych”, takich jak e-mail i aktualny czas?
xxstevenxo

4
INSERT INTO Table1 SELECT * FROM Table2

To odpowiedź bardzo niskiej jakości. Ponadto, w przeciwieństwie do zaakceptowanej odpowiedzi, nie próbuje nawet odnosić się do informacji zawartych w pytaniu.
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

Analiza

Możemy użyć powyższego zapytania, jeśli chcemy skopiować dane z jednej tabeli do innej tabeli w mysql

  1. Tutaj tabela źródłowa i docelowa są takie same, możemy również używać różnych tabel.
  2. Kilka kolumn, których nie kopiujemy, jak style_id i is_deleted, więc wybraliśmy je na stałe z innej tabeli
  3. Tabela, której użyliśmy w źródle, zawiera również pole automatycznego przyrostu, więc opuściliśmy tę kolumnę i zostanie ona wstawiona automatycznie po wykonaniu zapytania.

Wyniki wykonania

1 wykonane zapytanie, 1 sukces, 0 błędów, 0 ostrzeżeń

Zapytanie: wstaw do obrazu wstępnego (identyfikator_statku, status_początkowy, rozszerzenie_pliku, identyfikator_ recenzenta, identyfikator_dostawcy, został usunięty, ostatnia aktualizacja) wybierz ...

Dotyczy 5 rzędów

Czas realizacji: 0,385 sek. Czas transferu: 0 sek. Całkowity czas: 0,386 sek

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.