改变 SQL 函数和查询的结果 [重复]

Varies result for SQL function and Query [duplicate]

提问人:Itian 提问时间:2/26/2023 最后编辑:Ankit BajpaiItian 更新时间:2/26/2023 访问量:33

问:

我有一个 SQL 函数,其中包含一个简单的 Select Count 查询,当在 SQL 模式下运行查询时,它会给出正确的结果,而当在函数中使用相同的查询时,结果会有所不同。两种情况都与此处相同;

1.SQL查询

SELECT COUNT(*) FROM responses WHERE batch='2K18' AND degree_program='BSC' ;

2.SQL 函数

BEGIN
       DECLARE ResponseCount INTEGER;
       SET ResponseCount = (SELECT COUNT(*) FROM responses WHERE batch=BATCH AND degree_program=DEGREEPROGRAM);
    RETURN (ResponseCount);
END

SQL 查询的结果是正确的,而在 SQL 函数中使用时,它只检查 where 子句的第二个参数。可能的解决方案是什么。

mysql sql 函数 where-clause and-operator

评论

0赞 nbk 2/26/2023
切勿使用与列名相同的变量名,

答:

0赞 Littlefoot 2/26/2023 #1

对我来说,这很可疑:

WHERE batch=BATCH AND degree_program=DEGREEPROGRAM); 
      -----------
      this

怎么会这样?因为您命名的列和参数相同,所以它的计算结果类似于 which is always true,即您根本不过滤第一个参数上的数据。where 1 = 1

另一方面,第二个参数的名称与列名称(其名称中带有下划线)不同。

一般来说,如果您根据最佳实践接受命名约定,并使用前缀 as 或(作为“in”参数)或您认为合适的任何其他参数来命名参数,这是件好事。par_i_

因此,如果您的查询如下所示

... SET ResponseCount = (SELECT COUNT(*) 
                         FROM responses r 
                         WHERE r.batch          = PAR_BATCH 
                           AND r.degree_program = PAR_DEGREE_PROGRAM);

它可能会按您的预期工作。