ユーザーが選択した数量に基づいて、製品の異なる価格を選択しようとしています。これは私が取り組んでいるクエリです(構文エラーがあります):
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
は必要ないと思います。
MySQLのIF()
は、3項関数であり、制御構造ではありません。最初の引数の条件が真の場合、2番目の引数を返します。それ以外の場合は、3番目の引数を返します。対応する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にバグが見つかりました。列変数(qty_1など)の値が2番目の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ステートメントは手順の中にある必要があります。この投稿は、開発とテスト中にプロシージャでスクリプトを使用する素晴らしい例を示しています。基本的に、プロシージャを作成して呼び出し、ドロップします。