MySQL中的ELSEIF在select查询中

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

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; 

你有这样的存储过程中使用的参考,但他们不打算像现在这样使用。 你可以使用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

IF() MySQL中的IF()是一个三元函数,而不是一个控制结构 – 如果第一个参数的条件为真,则返回第二个参数; 否则,返回第三个参数。 没有相应的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) ) ) ) 

这些条件对我来说并不合理(看起来好像其中有些可能会被无意中颠倒过来),但是不知道你到底想要完成什么,我很难解决这个问题。

当使用嵌套的if()函数时,我在MySQL 5.1.72中发现了一个错误….列variables(例如qty_1)的值在第二个if()中是空白的,使得它无效。 改为使用以下结构:

 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 

对于你的问题:

 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/

根据Nawfal的回答,IF声明需要在一个程序中。 我发现这个post显示了在开发和testing过程中使用脚本的一个很好的例子。 基本上,你创build,然后调用然后删除过程:

https://gist.github.com/jeremyjarrell/6083251