从另一列替换或替换 MySQL 查询中的值

Substitute or replacing value in MySQL query from another column

如何将 MySQL 查询中的 NULL 值替换或替换为我需要的值?

If null or coalesce or with case or with if? 我无法让它工作。

例子在SQL Fiddle

如果我获得非活动产品的 NULL 值,我需要将其替换为 0,但是当我获得活动产品的 NULL 值时,我需要将其替换为0 并在非活动列中将 NULL 值替换为第三列中的值。

没有 UPDATEINSERT 函数,因为这是一个 MySQL 视图。


基本上我需要的是:

if active <> 0 and inactive <> 0
then 'no value change'

if active <> 0 and inactive = null
then inactive = 0

if active = null
then active = 0 and inactive = product_sum

我们可以使用 表达式 代替 SELECT 列表中的列名。

如果我们希望 SQL 可移植并且符合 ANSI 标准,我们可以使用 CASE 表达式。例如:

  SELECT CASE WHEN t.inactive_product IS NULL
           THEN t.product_sum
           ELSE t.inactive_product 
         END AS inactive_product
    FROM ... t

使用 COALESCE 函数可以获得(更简洁)等效的结果:

  SELECT COALESCE(t.inactive_product,t.product_sum) AS inactive_product
       , COALESCE(t.active_product,0)               AS active_product
    FROM ... t

大多数数据库,包括 MySQL,都提供扩展 SQL 标准的功能。

在 MySQL 中使用方便的 IFNULL 函数可以实现相同的结果。

  SELECT IFNULL(t.inactive_product,t.product_sum) AS inactive_product
       , IFNULL(t.active_product,0)               AS active_product
    FROM ... t

跟进:

在我看来,以下条件在数据中往往为真,或者至少在我们想要返回的结果中:

 product_sum = active_product + inactive_product

我会这样做:

SELECT ... 
     , t.product_sum
     , IFNULL(t.active_product,0) AS active_product
     , IFNULL(t.inactive_product,t.product_sum-IFNULL(t.active_product,0))
       AS inactive_product
 FROM ... t