我想得到的是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
中的数据。
查询中的别名不等同于过程变量。如果要分配给变量,请使用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