MYSQL根据表A中的列值将表A记录到表B和C(由外键链接)中

时间:2011-01-08 00:09:51

标签: mysql select insert foreign-keys conditional

一直在寻找一个简单的mysql插入问题解决方案。问题如下:

我正在整理一个由部门和办公桌组成的组织数据库。部门可能有也可能没有n个办公桌。

部门和办公桌都有自己的桌子,通过办公桌上的外键链接到部门的相关记录(即pk)。我有一个临时表,我用它来放置所有新的部门数据(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语句中生成的第一个id之外,这是有效的,因此所有桌面都有相同的department_id,我需要相对于部门的id ...

在伪代码中:

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 :(得分:0)

表A {id,dept,desk}

表B {id,foreignkey,dept}

插入B(id,foreignkey,dept)从A中选择null,id,dept;

答案 1 :(得分:0)

好的,找到了解决方案。我将不得不创建一个存储过程并使用游标。我将报告我的进展情况。