递归运行mysql函数

u59ebvdq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(340)

我在mysql中有一个函数,需要在一个查询中运行大约50次(不是一个设定值)。输入当前存储在一个数组中,例如 [1,2,3,4,5,6,7,8,9,10] 当单独执行mysql查询时,它运行良好,请参见下面的内容 column_name 表示它获取数据的列,在本例中,它是数据库中的一个double
中的第二个值 MOD() 函数是我从前面提到的数组中提供给mysql的输入

SELECT id, MOD(column_name, 4) AS mod_output
FROM table
HAVING mod_output > 10

为了实现输出,我需要以下代码

SELECT id, MOD(column_name, 4) AS mod_output1, MOD(column_name, 5) AS mod_output2, MOD(column_name, 6) AS mod_output3
FROM table
HAVING mod_output1 > 10 AND mod_output2 > 10 AND mod_output3 > 10

然而,这显然是非常肮脏的,当没有3个输入,但超过50,这将变得非常低效。
显然,从调用50多个单独的查询中,有没有更好的方法来获得相同种类(见下文)的输出?
在escennce中,我需要为mysql提供一个值列表并让它运行 MOD() 在指定列的所有列上。
我需要返回的唯一数据是 id 的行匹配 MOD() 函数以指定的输入输出(参见 MOD() 函数),其中输出小于10
请注意, MOD() 已经用作示例函数,但是,所需的最终函数应该是一个插入式替换
表格布局示例

id | column_name
1  | 0.234977
2  | 0.957739
3  | 2.499387
4  | 48.395777
5  | 9.943782
6  | -39.234894
7  | 23.49859
.....

(标题可能写错了,我不知道你还能怎么解释我在这里要做的事)

nom7f22z

nom7f22z1#

使用 join 和派生表或临时表:

SELECT n.n, t.id, MOD(t.column_name, n.n) AS mod_output
FROM table t CROSS JOIN
     (SELECT 4 as n UNION ALL SELECT 5 UNION ALL SELECT 6 . . .
     ) n
WHERE MOD(t.column_name, n.n) > 10;

如果要将结果作为列,可以在以后使用条件聚合。

相关问题