在SELECT(MySQL)程序中设置SET

问题描述 投票:0回答:1

我想得到的是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中的数据。

mysql sql
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
© www.soinside.com 2019 - 2024. All rights reserved.