MySQL:如何使用COALESCE

Sta*_*bie 9 mysql coalesce

说我有下表:

TABLE: product
===============================================================================
| product_id | language_id | name           | description                     |
===============================================================================
| 1          | 1           | Widget 1       | Really nice widget. Buy it now! |
-------------------------------------------------------------------------------
| 1          | 2           | Lorem  1       |                                 |
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我如何查询它,它试图给我namedescriptionwhere language_id= 2,但language_id如果列包含NULL,则回退到= 1?

在上面的例子中,我应该得到Lorem 1nameReally nice widget. Buy it now!description.

Fra*_*ado 8

这个怎么样?

SET @pid := 1, @lid := 2;
SELECT 
    COALESCE(name,(
        SELECT name
        FROM product
        WHERE product_id = @pid AND description IS NOT NULL
        LIMIT 1
    )) name, 
    COALESCE(description,(
        SELECT description
        FROM product
        WHERE product_id = @pid AND description IS NOT NULL
        LIMIT 1
    )) description
FROM product
WHERE product_id = @pid 
    AND (language_id = @lid 
    OR language_id = 1)
ORDER BY language_id DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

哪里:

  • @pid:当前产品ID
  • @lid:当前语言ID
  • name和/或的值description可以为null
  • language_id = 2项目不存在