Мы могли бы использовать выражение в списке 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)
и др.
Followup
Если мы не хотим изменять исходный оператор 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')