我正在使用SQlite,并且已经有table1:
Count | Fruit | Variety
------ |------ |--------
2 | Pear | Nashi
3 | Plum | Garnet
根据表1中的信息,我想使用查询以最佳方式生成表2:
Count | Fruit | Variety
------ |------ |--------
1 | Pear | Nashi
1 | Pear | Nashi
1 | Plum | Garnet
1 | Plum | Garnet
1 | Plum | Garnet
我研究过的选项:
用户定义的函数-无法执行,因为我现在无法更新二进制文件。否则,这是可能的,因为当我执行第一个表时,我也可以在C ++中创建第二个表。
简要介绍一下使用触发器,假设我可以允许用户仅将
(2, pear, Nashi)
之类的记录插入到table2中,并使用INSTEAD OF
触发器,该触发器将基于计数插入适当数量的记录。但是,看来我不能在表上使用INSTEAD OF触发器。研究过是否可以找到一种在sqlite中运行循环的方法,但看来我的机会很渺茫。
我可能不知道有一个更简单的解决方案。非常感谢您的帮助。
最佳答案
使用递归触发器和table2
(RCount
)中的附加列可以计算必须运行多少剩余触发器:
PRAGMA recursive_triggers = ON; -- must be executed in every connection
CREATE TRIGGER tr1
AFTER INSERT ON table1
BEGIN
INSERT INTO table2(Count, Fruit, Variety, RCount)
VALUES (1, NEW.Fruit, NEW.Variety, NEW.Count);
END;
CREATE TRIGGER tt2
AFTER INSERT ON table2
WHEN NEW.RCount > 1
BEGIN
INSERT INTO table2(Count, Fruit, Variety, RCount)
VALUES (1, NEW.Fruit, NEW.Variety, NEW.RCount - 1);
END;
关于sqlite - 使用触发器在SQlite中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44017732/