首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql测试变量是否为空(或为空)

问mysql测试变量是否为空(或为空)
EN

Stack Overflow用户
提问于 2019-06-26 15:56:26
回答 3查看 4K关注 0票数 0

我们在mysql/mariadb中选择一行,并将所选列存储在变量中。在此之后,使用IF,我们想测试其中一个变量,看看它是否已经设置或为null,如果是,那么我们给它赋值并继续继续。

使用IS NULL似乎不适用于非表达式。

代码语言:javascript
复制
select id,history,active,jsonorder
INTO @id,@history,@active,@jsonorder
from myTable where uid = myUid
delimiter |
IF @jsonorder IS NULL THEN
  @myNewVal="zzz";
ELSE
  @myNewVal="yyy";
END IF|
insert into otherTable (colA) VALUES (@myNewVar);

测试select是否向变量(如@jsonorder )提供了一个值的正确方法是什么

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-26 16:02:36

我们可以在选择列表中使用一个表达式:

代码语言:javascript
复制
SELECT t.id
     , t.history
     , t.active
     , IFNULL(t.order,1) AS `order`
  INTO @id
     , @history
     , @active
     , @order
  FROM `myTable` t
 WHERE t.uid = ...

请注意,DELIMITER不是SQL语句;它的命令由mysql命令行客户端(和其他一些客户端)识别。

这里记录在MySQL参考手册中:https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html

还不清楚在什么环境下运行这个脚本;这是MySQL存储程序的一部分,还是被称为应用程序代码。我们到底想达到什么目的?

我们还可以在选择列表中使用其他几个表达式。

代码语言:javascript
复制
CASE WHEN t.order IS NULL THEN 1 ELSE t.order END` 

或

代码语言:javascript
复制
IF(t.order IS NULL,1,t.order)

等人提出的。

随访

如果我们不想修改原始SQL语句;如果我们执行以下操作:

代码语言:javascript
复制
SELECT t.id
     , t.history
     , t.active
     , t.jsonorder
  INTO @id
     , @history
     , @active
     , @jsonorder
  FROM `myTable` t
 WHERE t.uid = ...

然后,我们想要对另一个用户定义的变量执行赋值,基于条件测试,我们可以在另一个SELECT或SET语句中实现这一点。

例如:

代码语言:javascript
复制
SELECT @myNewVal := IF(@jsonorder IS NULL,'zzz','yyy') ;
                      ELSE 'yyy'

-或者-

代码语言:javascript
复制
SELECT CASE
         WHEN @jsonorder IS NULL 
         THEN 'zzz'
         ELSE 'yyy'
       END
  INTO @myNewVal

-或者-

代码语言:javascript
复制
SET @myNewVal := IF(@jsonorder IS NULL,'zzz','yyy')
票数 1
EN

Stack Overflow用户

发布于 2019-06-27 03:02:16

IF语句只能用于存储的例程。IF函数几乎可以在可以放置表达式的任何地方使用:

代码语言:javascript
复制
select id,history,active,jsonorder
    INTO @id,@history,@active,@jsonorder
    from myTable
    where uid = myUid;
insert into otherTable (colA)
    VALUES (IF(@jsonorder IS NULL, "zzz", "yyy"));

myUid从哪里来?

otherTable是否只有一列宽?还是所有其他列都有默认值?

(我担心你过分地净化了这个问题。)

票数 1
EN

Stack Overflow用户

发布于 2019-06-26 15:59:56

这可以解决订单为空的情况,但不适用于表中不存在myUid的情况。

代码语言:javascript
复制
SELECT id,history,active, COALESCE(order,1)
INTO @id,@history,@active,@order
FROM myTable 
WHERE uid = myUid
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56776835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档