MYSQL вставка записей из таблицы A в таблицы B и C (связанные внешним ключом) в зависимости от значений столбцов в таблице A - PullRequest
0 голосов
/ 08 января 2011

Искал все выше и ниже простое решение проблемы вставки mysql. Проблема заключается в следующем:

Я собираю организационную базу данных, состоящую из отделов и столов. Отдел может иметь или не иметь n столов.

У обоих отделов и отделов есть своя собственная таблица, связанная внешним ключом в отделах с соответствующей записью в отделах (т. Е. ПК). У меня есть временная таблица, которую я использую для размещения всех новых данных отдела (n записей длиной) ... В этой таблице n номеров кабинетных записей для отдела следуют непосредственно за записями отдела. В таблице TEMP, если значение столбца Department_name имеет значение, оно является отделом, в противном случае оно будет иметь значение для таблицы столбцов и, следовательно, будет таблицей, связанной с вышеуказанным отделом. Как я уже сказал, возможно, есть несколько записей, пока вы не перейдете к следующей записи отдела.

Вот пример таблицы записей

TEMP{Department,Desk main_telephone, telephone2, telephone3, email, email2, website}

departments(department, telephone1, telephone2, telephone3, email, email2, website)

desks(Desk, foreignkey=Department id, telephone1, telephone2, telephone3, email, email2, website) 

Хорошо, я хочу сделать следующее:

Из TEMP вставьте отделы в таблицу отделов, а их столы - в стол столов, сгенерировав внешний ключ в настольной записи для идентификатора соответствующих отделов.

Вот что у меня есть на данный момент

INSERT INTO departments(department,main_telephone,telephone2,telephone3,main_fax,website,email,email2)

SELECT Department,Tel1, Tel2, Tel3, Fax, Email, Email2, Web 
  FROM temp WHERE Department != '';

SELECT @last_department := LAST_INSERT_ID();

INSERT INTO department_desks(department_id,department, telephone, extension, telephone2, extension2, telephone3, extension3, fax, email)

SELECT @last_department, Desk,Tel1, Ext1, Tel2, Ext2, Tel3, Ext3,Fax, Email
  FROM temp WHERE Desk != '';

Это работает, за исключением того, что last_insert_id возвращает первый идентификатор, сгенерированный в приведенной выше инструкции INSERT INTO, поэтому все столы имеют одинаковый департамент_ид, и мне нужен идентификатор относительно отдела ...

В псевдо-коде:

for each record in TEMP table
if Department
   INSERT the record into Departments
   get the id of the newly created Department record and store it somewhere
else if Desk
   INSERT the desk into the desks table with the relevant departments id as the foreignkey

еще раз отметим, что все столы отделов следуют непосредственно за отделом в таблице TEMP

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Хорошо, нашел решение.Я собираюсь создать хранимую процедуру и использовать курсор.Я доложу о своем прогрессе.

0 голосов
/ 08 января 2011

Таблица A {id, dept, desk}

Таблица B {id, foreignkey, dept}

вставить в B (id, foreignkey, dept) выбрать null, id, dept fromA;

...