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,然后调用然后删除过程: