MySQL `CASE` 语句的替代方法
MySQL alternative way to `CASE` Statement
我可以知道,是否有任何替代方法或简短方法来编写如下所示的 case
语句:
case
when p.our_price IS NULL OR p.our_price = 0
then p.sales_price
else p.our_price
end as sales_price
我尝试使用 mysql 内置函数 ifnull
,如下所示:
ifnull(p.our_price,p.sales_price)
但这对我不起作用。
IF(p.our_price IS NULL OR p.our_price = 0, p.sales_price, p.our_price)
第一个参数是条件,第二个和第三个参数是条件为真或假时的选择。
您可以坚持使用 CASE
表达式,但使用 COALESCE
使其更简洁:
CASE COALESCE(p.our_price, 0)
WHEN 0 THEN p.sales_price ELSE p.our_price END AS sales_price
或者,使用 IF()
函数:
IF(COALESCE(p.our_price, 0) = 0, p.sales_price, p.our_price)
作为 MySQL 的长期用户,我经常发现自己使用 CASE
多于 IF()
,因为前者允许完全省略 ELSE
条件。 IF()
另一方面,总是需要一个明确的 else 值。
我可以知道,是否有任何替代方法或简短方法来编写如下所示的 case
语句:
case
when p.our_price IS NULL OR p.our_price = 0
then p.sales_price
else p.our_price
end as sales_price
我尝试使用 mysql 内置函数 ifnull
,如下所示:
ifnull(p.our_price,p.sales_price)
但这对我不起作用。
IF(p.our_price IS NULL OR p.our_price = 0, p.sales_price, p.our_price)
第一个参数是条件,第二个和第三个参数是条件为真或假时的选择。
您可以坚持使用 CASE
表达式,但使用 COALESCE
使其更简洁:
CASE COALESCE(p.our_price, 0)
WHEN 0 THEN p.sales_price ELSE p.our_price END AS sales_price
或者,使用 IF()
函数:
IF(COALESCE(p.our_price, 0) = 0, p.sales_price, p.our_price)
作为 MySQL 的长期用户,我经常发现自己使用 CASE
多于 IF()
,因为前者允许完全省略 ELSE
条件。 IF()
另一方面,总是需要一个明确的 else 值。