Як скопіювати дані з однієї таблиці в іншу нову таблицю в MySQL?


143

Я хочу скопіювати дані з однієї таблиці в іншу в MySQL.

Таблиця 1 (Існуюча таблиця):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Таблиця 2 (Нова таблиця)

st_id
uid
changed
status
assign_status

Я хочу скопіювати деякі поля даних з ТАБЛИЦІ 1 в ТАБЛИЦЮ 2.

Це можна зробити за допомогою запитів MySQL?


1
Це разова робота чи ви плануєте це робити регулярно?
jdias

@@ jdias: поки що це разова робота ..
Fero

@jdias Щоб уточнити, якщо це не одноразова робота, що замість цього повинен шукати noob MySQL?
Seanny123

1
Можливо, перегляди, щоб уникнути дублювання даних.
Джеймс Бредбері

Відповіді:


280

Це зробить те, що ви хочете:

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

Якщо ви хочете включити всі рядки з таблиці1. В іншому випадку ви можете додати оператор WHERE до кінця, якщо ви хочете додати лише підмножину таблиці1.

Я сподіваюся, що це допомагає.


Чудово, радий, що це те саме, що я звик у T-SQL.
jpierson

1
Ще одна причина любити MySQL, дуже інтуїтивно зрозумілий!
пецепс

Якщо ви хочете скопіювати всі дані table1, тоді вам слід створити нову таблицю2 перед копіюванням @SANDEEP
Sachin з Пуна

77

Якщо ви не хочете перераховувати поля, а структура таблиць однакова, ви можете зробити:

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

або якщо ви хочете створити нову таблицю з тією ж структурою:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Довідка для вибору вставок ; Довідка для вибору таблиці створення


2
чому [AS]в квадратних дужках, що робиться ASтут
Kasun Siyambalapitiya

3
Він позначає, що слово необов’язкове. Це написано так, тому що я скопіював і вставив з документів; це нічого не додає. Я думаю, що це ASє обов'язковим для інших діалектів SQL.
Брайан

22

Ви можете легко отримати дані з іншої таблиці. Ви повинні додати поля, які ви бажаєте.

Myql-запит:

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


де значення копіюються з table2 в table1





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

2
Хоча цей код може відповісти на питання, було б краще пояснити, як він вирішує проблему і навіщо її використовувати. Відповіді, що стосуються лише коду, в довгостроковій перспективі не корисні.
Тобіас Ліефке

0

Ви можете спробувати цей код

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id

0

вищезазначений запит працює лише у тому випадку, якщо ми створили таблицю клієнтів із відповідними стовпцями замовника

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer

0

Спершу слід створити table2.

вставити в table2 (field1, field2, ...)
виберіть поле1, поле2,….
з таблиці1
де стан;

0

ЯКЩО таблиця існує. ви можете спробувати вставити у table_name select * from old_tale;

ЯКЩО таблиця не існує. вам слід спробувати створити таблицю table_name типу old_table; вставити в таблицю_набір вибрати * від old_tale;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.