+-
[MySQL,当值不存在时返回默认行

我有一个带有设置水印图像选项的数据库。如果找不到客户端,则应从表中返回默认的水印图像名称。数据如下:

表名:水印

id | watermark_image_name  | use_watermark | client
1    default_watermark.png | 1             | NULL
2    client1.png           | 1             | client1

因此,例如,如果client = client1,则只会返回client1.png。如果client为null,或者我指定了不存在的client2,它将从表中返回default_watermark.png的默认值。

欢呼声

0
投票

这是通过联合/限制技巧实现此目的的一种方法:

(SELECT * FROM watermark WHERE client IS NULL)
UNION ALL
(SELECT * FROM watermark WHERE client = 'client1')
ORDER BY client DESC
LIMIT 1

此技巧通过生成包含空客户行以及可能匹配的客户记录的中间结果集来工作。如果找到匹配的客户端,我们将按客户端的降序进行排序,以将空行强制移至第二个位置。如果未找到匹配项,则只返回默认的空行。

0
投票

使用COALESCE-它返回第一个非空值:

select coalesce(w1.watermark_image_Name, (select watermark_image_name from watermark where client is null)) FROM watermark w1 where client = 'x'

https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_coalesce