我们在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 )提供了一个值的正确方法是什么
发布于 2019-06-26 16:02:36
我们可以在选择列表中使用一个表达式:
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存储程序的一部分,还是被称为应用程序代码。我们到底想达到什么目的?
我们还可以在选择列表中使用其他几个表达式。
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')发布于 2019-06-27 03:02:16
IF语句只能用于存储的例程。IF函数几乎可以在可以放置表达式的任何地方使用:
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是否只有一列宽?还是所有其他列都有默认值?
(我担心你过分地净化了这个问题。)
发布于 2019-06-26 15:59:56
这可以解决订单为空的情况,但不适用于表中不存在myUid的情况。
SELECT id,history,active, COALESCE(order,1)
INTO @id,@history,@active,@order
FROM myTable
WHERE uid = myUidhttps://stackoverflow.com/questions/56776835
复制相似问题