Jak skopiować dane z jednej tabeli do innej nowej tabeli w MySQL?

143

Chcę skopiować dane z jednej tabeli do drugiej w MySQL.

Tabela 1 (Istniejąca tabela):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tabela 2 (nowa tabela)

st_id
uid
changed
status
assign_status

Chcę skopiować niektóre pola danych z TABELI 1 do TABELI 2.

Czy można to zrobić za pomocą zapytań MySQL?

Fero
źródło
1
Czy to jednorazowa praca, czy planujesz wykonywać ją regularnie?
jdias,
@@ jdias: do tej pory jest to praca jednorazowa ..
Fero
@jdias Aby wyjaśnić, jeśli nie jest to jednorazowa praca, czego powinien zająć się noob MySQL?
Seanny123,
1
Prawdopodobnie widoki, aby uniknąć dublowania danych.
James Bradbury,
Możliwy duplikat kopiowania danych do innej tabeli
Marcus Vinicius Melo

Odpowiedzi:

280

To zrobi, co chcesz:

INSERT INTO table2 (st_id,uid,changed,status,assign_status)
SELECT st_id,from_uid,now(),'Pending','Assigned'
FROM table1

Jeśli chcesz uwzględnić wszystkie wiersze z tabeli 1. W przeciwnym razie możesz dodać instrukcję WHERE na końcu, jeśli chcesz dodać tylko podzbiór tabeli tabela1.

Mam nadzieję, że to pomoże.

jdias
źródło
Świetnie, cieszę się, że jest to to samo, do czego przywykłem w T-SQL.
jpierson
1
Jeszcze jeden powód, by pokochać MySQL, bardzo intuicyjny!
peceps
Jeśli chcesz skopiować wszystkie dane tabeli1, musisz utworzyć nową tabelę2 przed skopiowaniem @SANDEEP
Sachin z Pune
77

Jeśli nie chcesz wymieniać pól, a struktura tabel jest taka sama, możesz zrobić:

INSERT INTO `table2` SELECT * FROM `table1`;

lub jeśli chcesz utworzyć nową tabelę o tej samej strukturze:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Odniesienie do wyboru wkładki ; Odniesienie do tworzenia wyboru tabeli

Bryan
źródło
2
dlaczego [AS]jest w nawiasach kwadratowych, co odbywa się AStu
kasun Siyambalapitiya
3
Oznacza to, że słowo jest opcjonalne. Jest napisane w ten sposób, ponieważ skopiowałem i wkleiłem z dokumentów; nic nie dodaje. Myślę, że ASjest to obowiązkowe w innych dialektach SQL.
Bryan
22

Możesz łatwo pobrać dane z innej tabeli. Musisz tylko dodać pola, które chcesz.

Zapytanie mysql to:

INSERT INTO table_name1(fields you want)
  SELECT fields you want FROM table_name2


gdzie wartości są kopiowane z tabeli 2 do tabeli 1

php
źródło
11
CREATE TABLE newTable LIKE oldTable;

Następnie, aby skopiować dane

INSERT INTO newTable SELECT * FROM oldTable;
Seymur Asadov
źródło
2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]
Nana Partykar
źródło
2
Chociaż ten kod może odpowiedzieć na pytanie, lepiej byłoby wyjaśnić, jak rozwiązuje problem i dlaczego go używać. Odpowiedzi zawierające tylko kod nie są przydatne na dłuższą metę.
Tobias Liefke
0

Możesz wypróbować ten kod

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id
Biddut
źródło
0

powyższe zapytanie działa tylko wtedy, gdy utworzyliśmy tabelę klientów z pasującymi kolumnami klienta

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer
Qanuni
źródło
0

Najpierw powinieneś utworzyć table2.

wstaw do tabeli2 (pole1, pole2, ...)
wybierz pole1, pole2, ....
z tabeli 1
gdzie stan;
Sriyashree Swain
źródło
0

JEŚLI tabela istnieje. możesz spróbować wstawić do table_name select * from old_tale;

JEŚLI tabela nie istnieje. powinieneś spróbować stworzyć tabelę nazwa_tabeli jak stara_tabela; wstaw do table_name wybierz * from old_tale;

Jac Tian
źródło