【问题标题】:Looping SQL query in MySQL WorkbenchMySQL Workbench 中的循环 SQL 查询
【发布时间】:2016-01-14 03:20:43
【问题描述】:

尝试在工作台中运行一个查询,该查询将遍历所有 site_id,并针对每个站点测试我的查询。这应该很容易,但我错过了一些东西。

SET @user_id = 449;
SET @getsites.site_id = 11;
WHILE(@getsites.site_id < 535) DO
     SELECT routine goes here
     SET @getsites.site_id = @getsites.site_id + 1;
END WHILE;

【问题讨论】:

  • 为什么不能像select ... from table where user_id = 449 and site_id between 11 and 534这样写一个简单的SQL语句?
  • 将帮助我确定问题站点,如果查询一直运行直到它爆炸,而不是立即轰炸整个查询,现在它会这样做。
  • 您仍然可以通过运行 select ... between 11 and 272select ... between 273 and 534 来做到这一点。看哪一个失败了。如果第一个失败,运行select ... between 11 and 142select ... between 143 and 272 等等。这就像二分搜索,您可能会比按顺序运行查找故障的步骤更少。
  • 如果你仍然决定做你正在做的事情,我推荐stored procedureselect into
  • 查询只接受一个 site_id 而不是一个范围,所以只想做一个简单的循环或 while

标签: mysql sql loops workbench


【解决方案1】:

我正在共享一个 proc 块,您可以根据自己的要求进行转换。

DELIMITER $$
USE test$$ -- database name
DROP PROCEDURE IF EXISTS proc_name$$
CREATE PROCEDURE proc_name()
BEGIN
DECLARE user_id INT(3) DEFAULT 0;
DECLARE site_id INT(4) DEFAULT 0;
SET site_id = 11;
REPEAT
    SELECT 1; -- routine goes here [execute your logic here]
    SET site_id = site_id + 1;
UNTIL site_id < 535 END REPEAT;
SELECT "Proc completed" AS Result;
END$$

DELIMITER ;

先用 SQL 试试,如果不行再试试过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2013-08-26
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多