在MySQL中将两个不同的表中的值插入另一个表中

时间:2014-06-16 18:34:48

标签: mysql olap

我想用两个不同的表格填充我的一个表格(它将成为我的OLAP多维数据集的一个维度)。所以我有桌子

 Birth_Act (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 citizen_id INT,
 birth_date DATETIME,
 place VARCHAR(20)
 );

 Death_Act (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 deceased_id INT,
 death_date DATETIME,
 place VARCHAR(20)
 );

我想将此简化为一个表格,具有以下结构:

 Act (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 year INT,
 month INT,
 place VARCHAR(20),
 type VARCHAR(20),
 );

现在我想创建一个程序,该程序将插入表格Act值:年 - 出生日期从Birth_Act表,月 - 出生日期来自同一张表,地点 - 来自Birth_Act表,然后输入 - 出生。在此之后,我希望它与Death_Act一样。是否可以在单个查询中执行?我尝试以下方式:

  create procedure fillAct()
begin
  declare i int Default 0;
   myloop: loop
    INSERT INTO Act (id, type, year, month, place) VALUES 
    (i+1, "Birth", (SELECT YEAR(birth_date) FROM Birth_Act LIMIT 1), 
    (SELECT MONTH(birth_date) FROM Birth_Act LIMIT 1),
    (SELECT place FROM Birth_Act LIMIT 1));
    set i=i+1;
    if i=10000 then
    leave myloop;
end if;
end loop myloop;
   end $$

然后我想从i = 10000开始对死亡行为做同样的事情。但显然这并不能完成这项工作并且看起来像个坏主意。

1 个答案:

答案 0 :(得分:1)

从2个表中执行2个SELECTS的UNION,然后将它们插入到第3个表中,所有这些都在一个查询中,如下所示:

INSERT INTO Act (type, year, month, place)
SELECT 'Birth', YEAR(birth_date), MONTH(birth_date), place FROM Birth_Act
UNION
SELECT 'Death', YEAR(death_date), MONTH(death_date), place FROM Death_Act

请注意,ID是AUTO_INCREMENT的主键,因此无需自己设置ID。