Как скопировать данные из одной таблицы в другую новую таблицу в 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 Чтобы уточнить, если это не единовременная работа, что вместо этого должен рассмотреть занятие 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 в конец, если вы хотите добавить только подмножество table1.

Надеюсь, это поможет.


Отлично, рад видеть, что это то же самое, к чему я привык в T-SQL.
jpierson

1
Еще одна причина любить MySQL, очень интуитивно понятный!
peceps

Если вы хотите скопировать все данные таблицы table1, то перед копированием @SANDEEP
Sachin из Pune

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

Вы можете легко получить данные из другой таблицы. Вы должны добавлять поля только вы хотите.

MySQL запрос:

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


где значения копируются из таблицы2 в таблицу1





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.

вставить в таблицу2 (поле1, поле2, ...)
выберите поле1, поле2, ....
из таблицы1
где состояние;

0

ЕСЛИ таблица существует. Вы можете попробовать вставить в table_name select * from old_tale;

ЕСЛИ таблицы не существует. Вы должны попробовать создать таблицу table_name наподобие old_table; вставить в имя_таблицы select * from old_tale;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.