Как скопировать данные из одной таблицы в другую новую таблицу в 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.

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

jdias
источник
Отлично, рад видеть, что это то же самое, к чему я привык в 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;

Ссылка для выбора вставки ; Ссылка для создания таблицы выбора

Bryan
источник
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

PHP
источник
11
CREATE TABLE newTable LIKE oldTable;

Затем скопировать данные поверх

INSERT INTO newTable SELECT * FROM oldTable;
Сеймур Асадов
источник
4

Наилучшим вариантом является использование оператора INSERT ... SELECT в mysql.

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

dexter.ba
источник
1
Интуитивно понятный :) Мне это нравится. Это обычный оператор SELECT, которому предшествует одна строка «INSERT INTO».
Haitham Sweilem
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
Biddut
источник
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;

Як Тиан
источник