选择查询中的MySQL IF ELSEIF


80

我正在尝试根据用户选择的数量选择不同的产品价格。这是我正在处理的查询(它有一个语法错误):

 select id, 
    (SELECT 
    IF(qty_1<='23',price,1)
    ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
    ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
    ELSEIF('23'>qty_3,price_4,1)
    END IF) as total 
 from product;

7
您应该使用CASE
Rufo爵士,2012年

Answers:


198

您已经在像这样的存储过程中使用了一些东西作为参考,但是现在不打算使用它们。您可以IF按所示使用duskwuff。但是,Case声明对眼睛更好。像这样:

select id, 
    (
    CASE 
        WHEN qty_1 <= '23' THEN price
        WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2
        WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3
        WHEN '23' > qty_3 THEN price_4
        ELSE 1
    END) AS total
 from product;

这看起来更干净。我想你无论如何都不需要内部SELECT


2
是的,确实的确,它看起来更好,我会选择此选项,但同时为以后的参考提供两种方法也很不错。.感谢nawfal
Ivan Bravo Carlos

很高兴将CASE用于IF。感谢Nawfal
萨蒂亚·

20

IF()在MySQL中,它是一个三元函数,而不是控制结构-如果第一个参数中的条件为true,则返回第二个参数;否则,它返回第三个参数。没有相应的ELSEIF()功能或END IF关键字。

与您所拥有的最接近的是:

IF(qty_1<='23', price,
  IF('23'>qty_1 && qty_2<='23', price_2,
    IF('23'>qty_2 && qty_3<='23', price_3,
      IF('23'>qty_3, price_4, 1)
    )
  )
)

这些条件对我来说并不都是合理的(看起来其中一些条件可能会被无意间逆转了?),但是在不知道您要实现的目标时,我很难解决。


我想一分钟前...选择productoid,precio,precio_2,precio_3,IF(cant_1> 23,precio,IF(23> cant_1 && cant_2> 23,precio_2,IF(23> cant_2 && cant_3> 23,precio_3 ,IF(23> cant_4,precio_4,1)))))的总和是,由于老板的要求,我无法创建独立的价格表,因为加入会员并获得该价格表要容易得多价格基于数量...
Ivan Bravo Carlos

会使用更接近的东西case when (condition) then {computed value} when then else end
ahnbizcad '16

9

我在使用嵌套的if()函数时在MySQL 5.1.72中发现了一个错误....在第二个if()中,列变量(例如qty_1)的值为空,使其无用。请使用以下构造:

case 
  when qty_1<='23' then price
  when '23'>qty_1 && qty_2<='23' then price_2
  when '23'>qty_2 && qty_3<='23' then price_3
  when '23'>qty_3 then price_4
  else 1
end

4

对于您的问题:

SELECT id, 
   IF(qty_1 <= '23', price,
   IF(('23' > qty_1 && qty_2 <= '23'), price_2,
   IF(('23' > qty_2 && qty_3 <= '23'), price_3,
   IF(('23' > qty_2 && qty_3<='23'), price_3,
   IF('23' > qty_3, price_4, 1))))) as total 
FROM product;

您可以在MySQL中使用if - else控件结构或IF函数。

参考:http :
//easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


1
尽管您的答案是100%正确,但是如果该链接被移动,更改,合并到另一个链接中或者主站点消失了,它也可能100%无用... :-(因此,请编辑您的答案并复制相关内容从链接到您的答案的步骤,从而保证您在本网站使用寿命的100%之内!;-)您始终可以将链接留在答案的底部,作为材料的来源...
唐纳德·达克

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.