mysql 测试 IF 变量 IS NULL(或空)

标签 mysql mariadb

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

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

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)提供值的正确方法是什么?

最佳答案

我们可以在 SELECT 列表中使用表达式:

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存储程序的一部分,或者称为应用程序代码。我们实际上想要实现什么?

<小时/>

我们还可以在 SELECT 列表中使用其他几个表达式,例如

CASE WHEN t.order IS NULL THEN 1 ELSE t.order END` 

IF(t.order IS NULL,1,t.order)

<小时/>

跟进

如果我们不想修改原来的SQL语句;如果我们执行这个:

SELECT t.id
     , t.history
     , t.active
     , t.jsonorder
  INTO @id
     , @history
     , @active
     , @jsonorder
  FROM `myTable` t
 WHERE t.uid = ...

然后我们想要根据条件测试对另一个用户定义的变量进行赋值,我们可以在另一个 SELECTSET 语句中实现。

例如:

SELECT @myNewVal := IF(@jsonorder IS NULL,'zzz','yyy') ;
                      ELSE 'yyy'

-或-

SELECT CASE
         WHEN @jsonorder IS NULL 
         THEN 'zzz'
         ELSE 'yyy'
       END
  INTO @myNewVal

-或-

SET @myNewVal := IF(@jsonorder IS NULL,'zzz','yyy')

关于mysql 测试 IF 变量 IS NULL(或空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776835/

相关文章:

php - 如何在 sql 表的右列中显示图像?

php - 我想从一个表格将数据发送到多个表中,但我选择的表不是其他表

mysql - 什么更快,子选择或不同(MySQL)?

mysql - 如何完全删除 mariaDB 以便我可以重置 root 密码?

php - Magento 2 脚本等待创建临时表

MySQL 记录磁盘使用计算 |我对吗?

Mysql:连接翻译记录表

mysql - 如何计算数据库查询中的文件?

java - Wildfly XA-数据源 - galera 集群

mysql - 记住我表索引