我被以下问题困扰, 我在存储过程中检查了一个varibale(DOUBLE),我需要将一个值(项目价格)从表(项)分配给此声明的变量。但是,我需要从一个使用案例内部的选择查询中获取此值,项目价格可以是2列,基于逻辑我必须找到正确的项目价格。请帮我解决这个问题,因为当我执行它时会给我一个错误,
这里是如何分层的,
DECLARE no_more_users INT DEFAULT 0;
DECLARE user_id INT DEFAULT 0;
DECLARE cart_id INT DEFAULT 0;
DECLARE cart_item_id INT DEFAULT 0;
DECLARE user_gift_id INT DEFAULT 0;
DECLARE itemPrice DOUBLE DEFAULT 0.0;
SELECT
CASE
WHEN sale_price=0 OR sale_price IS NULL THEN (price - ( price * discount ))
ELSE sale_price
END
INTO itemPrice
FROM item WHERE item_id = p_item_id ;
DECLARE checked_in_users CURSOR FOR
SELECT DISTINCT ul.user_id
FROM user_location ul
LEFT JOIN location_section ls ON ul.location_section_id = ls.location_section_id
INNER JOIN user u ON ul.user_id = u.user_id
INNER JOIN user_profile up ON u.user_id = up.user_id
INNER JOIN location_event le ON ul.location_event_id = le.location_event_id
WHERE ul.location_id = p_location_id AND ul.location_event_id = p_event_id
AND ul.checked_out_on IS NULL AND (ul.checked_in_on BETWEEN le.start_time AND le.end_time )
AND u.status = 1 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_users = 1;
OPEN checked_in_users;
FETCH checked_in_users INTO user_id;
read_loop: LOOP
更多代码...
请注意,sale_price,price和折扣是项目表的库存,逻辑是如果sale_price为空或值为0,那么我的实际销售价格应该从价格库中获得。最后我需要的是将核心项目价格作为先前声明的varibale。 任何帮助都会受到高度关注。
答案 0 :(得分:1)
CASE语句有两个foms,一个带表达式,另一个带值。你正在混淆它们。
值:
CASE variable
WHEN value_1 THEN foo
WHEN value_2 THEN bar
END
表达式:
CASE
WHEN expression_1 THEN foo
WHEN expression_2 THEN bar
END
尝试
CASE
WHEN sale_price=0 OR sale_price IS NULL THEN (price - ( price * discount ))
ELSE sale_price
END
此外,使用INTO时不需要“AS correct_price”
答案 1 :(得分:0)
您的选择查询存在一些问题。
您正在使用的CASE版本 - 即CASE var WHEN val1 THEN - 在尝试匹配NILL时不起作用,因为在SQL中null不等于null。
此外,您无法将值与条件组合在一起。
相反,如果只是条件的CASS,请使用该版本。还有其他的解决问题。转换破损的查询然后给出:
SELECT
CASE
WHEN ifnull(sale_price, 0) = 0 THEN price - (price * discount)
ELSE sale_price
END
INTO itemPrice
FROM item
WHERE item_id = p_item_id;
注意:如果您的表格中包含名为itemPrice
的列,则必须从变量中选择其他名称。 Mysql感到困惑:/