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

Posted

技术标签:

【中文标题】在 MySQL 中将两个不同表中的值插入到另一个表中【英文标题】:Inserting values from two different tables into another in MySQL 【发布时间】:2014-06-16 18:34:47 【问题描述】:

我想用来自两个不同表的值填充我的一个表(它将成为我的 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:

 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 开始对 Death Acts 做同样的事情。但显然这不起作用,而且似乎是个坏主意。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于在 MySQL 中将两个不同表中的值插入到另一个表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同的逗号分隔值插入mysql中的不同列

MySQL 中将一个表的数据插入另外一个表怎么做

如何执行存储在 MySQL 中的将 ID 从一个表插入到另一个表的过程?

如何将存储在引用表中的引用值插入到另一个表中?

MYSQL 如何把查询到的结果插入到另一个表中?

如何在 OpenOffice 中将一列单元格从一张表插入到另一张表的单个单元格中?