2016-03-08 4 views
1

У меня есть 4 таблицы они tbl_A, tbl_A_detail (имеет a_id), tbl_B, tbl_B_detail (имеет B_id), и я уже сделал «функцию», возвращающие GenerateCodeВставить в родительский и дочерний таблицу из другой таблицы Mysql

Я хочу вставить в tbl_A, а значения - от tbl_B, но с новым ID. Так будет выглядеть следующим образом:

tbl_B # 1 ряд (GX-110, 'Рони')

tbl_B_detail (# 1) # 1 ряд (GXD-421, 'куртка' , GX-110)

tbl_B_detail (# 1) # 2 ряд (GXD-421, 'Шапка', GX-110)

tbl_B # 2 ряд (GX-111, 'Джозеф')

tbl_B_detail (# 2) # 1 ряд (GXD-512, 'Солнцезащитные очки', GX-111)

tbl_B_detail (# 2) # 2 ряд (GXD-3623, 'ткани', GX-111)

я хочу, чтобы переместить эти записи в tbl_A (та же структура), но с новым generate_id дЛЯ tbl_A

тогда я хочу, чтобы вставить в tbl_A_detail из tbl_B_detail с новым generate_id дЛЯ tbl_A

INSERT INTO tbl_A (A_id, a_name, ...) SELECT (SELECT (Generate Code Here)), b.name FROM tbl_b

insert into tbl_A_detail(A_detail_id, A_detail_name, A_parent_id) SELECT (SELECT GenerateCode()), B_detail_name, (GeneratedCode FROM inserted Record) FROM tbl_B_detail

Как я могу это сделать? #i извините за мой плохой английский

ответ

0

Ваша таблица должна поддерживать транзакцию, например, InnoDB.

SET autocommit=0; 
begin; 
set @generated_id=(Generate Code Here); 
insert into table_a (id,title) select @generated_id, title from table_b where id=4; 
insert into table_a_detail (id,detail) select @generated_id, detail from table_b_detail where id=4; 
commit; 
+0

Но сэр, я хочу, чтобы переместить все записи из tbl_B, tbl_B_detail в tbl_A, tbl_A_detail (а не только 1 запись). Я попробовал свой код, но у меня появилось сообщение об ошибке «Дублировать запись для основного основного». есть ли у вас предложения? – Birdie21

+0

Вы должны проверить, существует ли сгенерированный идентификатор в таблице_a до его использования. – chenyb999

+0

попробуйте следующее: 'SET autocommit = 0; начало; repeat set @ generated_id = (Создать код здесь); выберите count (*) в @id_count из таблицы_a, где id = @ generated_id; \t до @id_count = 0; end repeat; Вставить в table_a (id, title) select @generated_id, заголовок из table_b где id = 4; Вставить в table_a_detail (id, detail) select @generated_id, detail from table_b_detail, где id = 4; commit; ' – chenyb999

Смежные вопросы