SET внутри SELECT (MySQL) ПРОЦЕДУРА

0

То, что я хочу получить, - user_discount.percent внутри DiscountVar.

Поэтому в THEN SET я могу вернуть единую discount = DiscountVar.

BEGIN
DECLARE DiscountVar FLOAT(28,10);

IF EXISTS 
(
SELECT
    user_discount.percent as DiscountVar,
    user_discount.link_id,
    user_discount.pacc_id,
    user_discount.timestamp_valid
FROM 
    user_discount
WHERE 
    user_discount.link_id = wo_id 
AND user_discount.pacc_id = pacc_id
AND UTC_TIMESTAMP>=user_discount.timestamp_valid
ORDER BY 
    user_discount.timestamp_valid DESC
LIMIT 1
)

THEN SET discount = DiscountVar;

ELSE SET discount = 0;
END IF;

END

Это возможно?


Я пробовал этот user_discount.percent AS percent INTO @DiscountVar но он не работал...


IF EXISTS на его собственные работы. Мне просто нужно сделать второй выбор только для вывода данных в THEN.

Теги:

1 ответ

0

Алиас в запросе не эквивалентен переменной процедуры. Если вы хотите назначить переменную, используйте SELECT... INTO.

Вы также можете использовать назначение с помощью :=. Но я думаю, что вы должны использовать пользовательскую переменную с префиксом @, а не объявленную переменную.

Когда вы выполняете запрос с EXISTS, он просто проверяет, соответствует ли запрос любым строкам, он не выполняет назначения. Вместо использования EXISTS выполните SELECT и проверьте, установлена ли переменная.

BEGIN

SELECT
    @DiscountVar := user_discount.percent,
    user_discount.link_id,
    user_discount.pacc_id,
    user_discount.timestamp_valid
FROM 
    user_discount
WHERE 
    user_discount.link_id = wo_id 
AND user_discount.pacc_id = pacc_id
AND UTC_TIMESTAMP>=user_discount.timestamp_valid
ORDER BY 
    user_discount.timestamp_valid DESC
LIMIT 1;

SET discount = IFNULL(@DiscountVar, 0);

END
  • 0
    Но если вы удалите user_discount.link_id , user_discount.pacc_id и user_discount.timestamp_valid мы получим ошибку. Потому что они используются в WHERE .
  • 0
    Мы должны иметь их в SELECT . Но как тогда мы приведем user_discount.percent в DiscountVar ?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню