我想用两个不同表中的值填充我的一个表(它将成为我的 OLAP 多维数据集的维度)。所以我有 table
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 开始的死亡行为做同样的事情。但显然这不起作用,而且似乎是一个坏主意。
最佳答案
从 2 个表中执行 2 个 SELECT 的 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_INCRMENT 的主键,因此无需自己设置 ID。
关于mysql - 在 MySQL 中将两个不同表中的值插入到另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250001/