MYSQL select a into b 关于b的值
平时使用MySQL写存储过程的时候,当使用到select a into b 时,关于变量b的值,不同情况会出现不同的结果。特此记录。
首先有一个测试表,内容如图所示:

1、当select出来的字段有值时,不论变量a是有有值,最终的结果都是select出来的值。
BEGIN
DECLARE a INT;
SELECT id into a FROM test2 WHERE id = 3;
SELECT a;
END

2、当select出来的字段没值时
(1)如果变量a声明时没有指定了默认值,那么最后的结果为NULL
BEGIN
DECLARE a INT;
SELECT id into a FROM test2 WHERE id = 100;
SELECT a;
END

(2)如果变量a声明时指定了默认值,则最后结果为默认值
BEGIN
DECLARE a INT DEFAULT 50;
SELECT id into a FROM test2 WHERE id = 13;
SELECT a;
END

(3)如果该变量之前已经赋过值,则为之前的值
BEGIN
DECLARE a INT DEFAULT 50;
SELECT id into a FROM test2 WHERE id = 3;
SELECT a;
SELECT id into a FROM test2 WHERE id = 13;
SELECT a;
END


可以看出,结果1结果2都是同一值,第二步操作没有改变变量a的内容。
=============================================================================
最近使用的发现,如果用了sum,即使有默认值,select的结果也是NULL
BEGIN
DECLARE a INT DEFAULT 50;
/*SELECT id into a FROM test2 WHERE id = 3;
SELECT a;*/
SELECT sum(id) into a FROM test2 WHERE id = 13;
SELECT a;
END

猜测,因为使用函数,如max,sum后,选出来的是个结果集,而结果集NULL,是存在的,所有into到变量上就还是NULL。而不加函数,则select出来的是空,into到变量上,就使用的是变量的默认值。

本文深入探讨了MySQL中SELECT...INTO...语句的特性,特别是当结合不同条件时,变量接收值的变化。通过实例,分析了字段有值、无值、指定默认值以及使用聚合函数等情况下的行为差异。

685

被折叠的 条评论
为什么被折叠?



