【问题标题】:loop and select with stored MySql循环并使用存储的 MySql 进行选择
【发布时间】:2019-01-09 03:14:58
【问题描述】:

我需要为每个部门的每个密码选择最后一次输入。 每个部门都有一个 3 位数的密码,每个人都有一个基于部门的密码。即 A 部门的编号为 000-099,B 部门的编号为 100-199,C 部门的编号为 201-299,依此类推,直到 999。

数据库保存每个人的姓名和密码。 J史密斯101 H 坦率 102 萨普 301 B国际象棋001 H罗伯茨401 罗伯特 402 b 布雷蒂 403

我需要一个排序,它应该遍历所有结果并返回每个部门的最后一个数字(在上述情况下为 102,301、001、403)

没有太多的快乐,应该是这样的

    delimiter #

    BEGIN

    declare nmax int unsigned default 9;

    declare nmin int unsigned default 0;

    while nmin < nmax do

    select Passcode from main where Passcode < min*100 limit 1;

    set nmin = nmin+1;

    end while;

    END #

    delimiter ;  

每次都抛出 1064 错误?

【问题讨论】:

  • 没有重复的 1064 包含大量错误
  • 能否请您分享完整的错误字符串?
  • 错误:在'BEGIN声明nmax int unsigned default 9;附近使用的sql错误(1064)语法;在第 8 行以无符号默认值 0 声明 nmin

标签: mysql while-loop mariadb


【解决方案1】:

您似乎在我这里遗漏了“CREATE PROCEDURE”行...这里我的控制台输出带有类似的声明

MySQL [prime]> delimiter #
MySQL [prime]> CREATE PROCEDURE p1 ()
    -> BEGIN
    -> declare nmax int unsigned default 9;
    -> declare nmin int unsigned default 0;
    -> while nmin < nmax do
    -> select n from primes where n < n*100 limit 1;
    -> set nmin = nmin+1;
    -> end while;
-> END #
Query OK, 0 rows affected (0.000 sec)

MySQL [prime]> call p1();
Empty set (0.000 sec)
Empty set (0.000 sec)
Empty set (0.000 sec)
Empty set (0.001 sec)
Empty set (0.001 sec)
Empty set (0.001 sec)
Empty set (0.001 sec)
Empty set (0.001 sec)
Empty set (0.001 sec)
Query OK, 0 rows affected (0.001 sec)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    修正语法错误后,你会发现更多的问题。

    • 什么是min
    • 在 tanaydin 的回答中检查 n 的用法;搞砸了。
    • 没有ORDER BYLIMIT 毫无用处
    • &lt; 应该是 &gt;=

    这是“groupwise max”的变体,它有其他解决方案——没有任何循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 2018-10-04
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2021-03-20
      • 2014-05-24
      相关资源
      最近更新 更多