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?


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,

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.


Ś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


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


11
CREATE TABLE newTable LIKE oldTable;

Następnie, aby skopiować dane

INSERT INTO newTable SELECT * FROM oldTable;



2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]

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

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

0

Najpierw powinieneś utworzyć table2.

wstaw do tabeli2 (pole1, pole2, ...)
wybierz pole1, pole2, ....
z tabeli 1
gdzie stan;

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;

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.