我们正在 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 = ...
然后我们想要根据条件测试对另一个用户定义的变量进行赋值,我们可以在另一个 SELECT
或 SET
语句中实现。
例如:
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/