Mysql使用Select case将单个列值分配给声明的值

时间:2013-04-07 13:29:32

标签: mysql

我被以下问题困扰, 我在存储过程中检查了一个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。 任何帮助都会受到高度关注。

2 个答案:

答案 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感到困惑:/