2013-12-19 5 views
0

У меня есть две таблицы с одинаковыми элементами, единственное отличие - это идентификаторы, которые являются первичным ключом и автоматическим приращением.Скопируйте содержимое одной таблицы в другую, оставив основной элемент

Table1 | Table2 
id1(PK)| id2(PK) 
col1 | col1 
col2 | col2 
col3 | col3 

Я знаю, что некоторые быстрые способы, чтобы сделать это, как,

INSERT INTO table2 SELECT * FROM table1 where id1 = 2 

при использовании такого способа содержания table2 имеет id2 = 2, как он копирует все поля непосредственно table2 из table1, чтобы ОГРАНИЧЕНИЯ что я могу также использовать метод

INSERT INTO table2(col1,col2,col3) SELECT col1,col2,col3 FROM table1 WHERE id1 = 2 

такой способ хорош для коротких столов, но у меня есть много колонок в моей таблице.

Мне нужен быстрый способ скопировать все столбцы из таблицы1 в таблицу2, оставив первичные столбцы, которые являются id2, так как он автоинкремент.

Его как я хочу скопировать указанную строку из таблицы1 в таблицу2 с другим id2 (который будет сгенерирован как его автоинкремент).

Есть ли какие-либо возможности.

+0

Почему вы не используете 'WHERE' условие, чтобы пометить его' = 'id2!. –

+0

, но все же, что скопирует все элементы из таблицы1 в таблицу2 leving that = id2, я хочу только скопировать определенную строку таблицы, которая зависит от id1. –

ответ

-1

Скопируйте все строки из table1 за исключением того, имеют тот же идентификатор в table2

INSERT INTO table2(col1, col2, col3) 
SELECT t1.col1, t1.col2, t1.col3  
FROM table1 t1 
WHERE t1.id1 not in (SELECT id2 FROM table2); 
+0

Прежде всего, это не то, что я делаю, это скопирует все строки из таблицы1, чей идентификатор не совпадает с id2, я просто хочу скопировать только одну строку, но не хочу копировать table1.id1 в table2, id2 будет генерироваться автоматически по мере его автоинкремента. –

0

Если вы не хотите называть имена столбцов, но хотите, чтобы скопировать все, а затем попытаться скопировать все данные в временную таблицу, то падение pk_id, а затем скопируйте остальные поля в нужную таблицу, и, наконец, отпустите таблицу temp.

Обратитесь к одному из моих ответов на подобные запросы: Mysql: Copy row but with new id


Мы можем использовать временную таблицу в буфере первым из основной таблицы и использовать его для копирования основной таблицы снова. Мы можем удалить pk-поле из таблицы temp и скопировать все остальные во вторую таблицу.

Со ссылкой на ответ по Tim Ruehsen в referred posting:

CREATE TEMPORARY TABLE tmp_table SELECT * from first_table WHERE ...; 
ALTER TABLE tmp_table drop pk_id; # drop autoincrement field 
# UPDATE tmp_table SET ...; # just needed to change other unique keys 
INSERT INTO second_table SELECT 0, tmp_table.* FROM tmp_table; 
DROP TABLE tmp_table; 
Смежные вопросы