Mysql通过所选列循环,并在循环中执行Insert查询
我正在尝试循环选定的段塞,并在SELECT查询中执行一些复杂的INSERT。Mysql通过所选列循环,并在循环中执行Insert查询,mysql,sql,Mysql,Sql,我正在尝试循环选定的段塞,并在SELECT查询中执行一些复杂的INSERT。 slugs[iteration]用法不是正确的mysql语法。但我必须在查询中逐个访问获取的slug。我怎样才能做到这一点 DELIMITER $$ CREATE PROCEDURE create_sitemap_from_slugs() BEGIN SELECT `slug` INTO slugs FROM slug_table; SELECT COUNT(*) INTO count FROM s
slugs[iteration]
用法不是正确的mysql语法。但我必须在查询中逐个访问获取的slug。我怎样才能做到这一点
DELIMITER $$
CREATE PROCEDURE create_sitemap_from_slugs()
BEGIN
SELECT `slug` INTO slugs FROM slug_table;
SELECT COUNT(*) INTO count FROM slug_table;
SET iteration = 0;
START TRANSACTION;
WHILE iteration < count DO
INSERT INTO line_combinations
SELECT REPLACE(`line`, '{a}', slugs[iteration]) AS `line`
FROM line_combinations
WHERE `line` LIKE CONCAT('%/', '{a}', '%');
SET iteration = iteration + 1;
END WHILE;
COMMIT;
END
$$
DELIMITER ;
分隔符$$
创建过程从\u slugs()创建\u站点地图\u
开始
从slug_表中选择“slug”进入slug;
从slug_表中选择COUNT(*)进入COUNT;
设置迭代=0;
启动交易;
当迭代
顺便说一句,我不想使用任何外部编程语言来实现这一点,这个过程将用于数十亿行。由于性能问题,我认为SQL中的循环不是一个好方法
如果你建议另一种方式,我也会接受
我又问了一个详细的问题,但没有得到答案。如果您还想检查:那么对于
{a}
的每一行,您需要从slug_表插入COUNT(*)乘以用slug
值填充的值
似乎您只需从SELECT插入一次就可以做到这一点
INSERT INTO line_combinations
(SELECT REPLACE(lc.line, '{a}', st.slug) AS `line`
FROM line_combinations lc, slug_table st
WHERE lc.line LIKE CONCAT('%/', '{a}', '%');
更新:
您可以创建临时表行组合2
并插入所有记录
FROM line_combinations
WHERE line LIKE CONCAT('%/', '{a}', '%')
进入临时表。然后在INSERT中使用临时表而不是原来的表现在它说无法重新打开表:行组合
我认为它在插入时锁定表,流式传输不起作用。您可以创建一个临时表行组合2并插入行组合中的所有记录,行组合中的行类似CONCAT(“%/”、“{a}”、“%”)进入临时表。然后在INSERT中使用临时表,而不是原始表。你是正确的,有5个像{a}这样的占位符。我想可能会有5个或6个临时表,无论如何,我认为没有使这个查询更简单:)你能更新你的答案吗?由于这个更改,我接受你的答案。