gpt4 book ai didi

MySQL SELECT INTO 返回 null 但查询返回一个值

转载 作者:行者123 更新时间:2023-11-29 02:03:03 25 4
gpt4 key购买 nike

出于某种原因,当我进行选择时,我无法让此查询返回值。

给定一个表 t10company,我有一个名为 CompanyID 的列,它是 CHAR(8),它的值为: MYCO0001

如果我发出以下查询:

SELECT
MAX(CONVERT(RIGHT(CompanyID, 4), UNSIGNED INTEGER))
FROM t10company
WHERE LEFT(CompanyID, 4) = 'MYCO'
GROUP BY LEFT(CompanyID, 4)
ORDER BY RIGHT(CompanyID, 4) LIMIT 1;

我得到的返回值为 1,这正是我所期望的。

如果我使用 INTO @myvar 发出完全相同的查询,然后执行 SELECT @myvar 它总是返回 NULL。它在我正在编写的存储过程中执行此操作,也在 MySQL Workbench 的查询窗口中执行此操作。不知道为什么?

最佳答案

我使用这种形式为MySQL中的用户变量赋值

SELECT @myvar := MAX(CONVERT(RIGHT(CompanyID, 4), UNSIGNED INTEGER)) FROM ...

根据 5.1 文档,这也应该有效:

SELECT MAX(CONVERT(RIGHT(CompanyID, 4), UNSIGNED INTEGER)) INTO @myvar FROM ...

我运行了一个快速测试 (MySQL 5.1),最后的 SELECT 显示 @myvar 被设置为 1。

CREATE TABLE t10company (CompanyID CHAR(8));
INSERT INTO t10company VALUES ('MYCO0001');
SET @myvar := NULL;
SELECT @myvar;
SELECT
MAX(CONVERT(RIGHT(CompanyID, 4), UNSIGNED INTEGER)) INTO @myvar
FROM t10company
WHERE LEFT(CompanyID, 4) = 'MYCO'
GROUP BY LEFT(CompanyID, 4)
ORDER BY RIGHT(CompanyID, 4) LIMIT 1;
SELECT @myvar;

ORDER BY 子句中的表达式有点奇怪。

你为什么要按那个点菜?聚合只会返回一行。不过,尚不清楚 MySQL 是否忽略了这一点,因为 MySQL 可能无法识别满足 WHERE 子句的所有行都将被组合成一个。

对于这个特定的语句,LIMIT 1 是多余的。

我建议您在没有 ORDER BY 的情况下尝试一下,看看是否有任何不同。

否则,我倾向于同意聚合函数和 GROUP BY 可能是问题所在。如果是,他们可能的解决方法是将您的语句包装在一组括号中作为内联 View (给它一个别名),然后从内联 View 中进行选择。

关于MySQL SELECT INTO <variable> 返回 null 但查询返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com