Возвращает строку по умолчанию в MySQL, когда значение не существует - PullRequest
1 голос
/ 09 марта 2020

У меня есть база данных с возможностью установки изображений водяных знаков. Если клиент не найден, он должен вернуть имя изображения водяного знака по умолчанию из таблицы. Данные выглядят следующим образом:

Имя таблицы: водяной знак

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 из таблицы.

Cheers

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Использовать 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

0 голосов
/ 09 марта 2020

Вот один из способов сделать это с помощью трюка объединения / ограничения:

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

Этот трюк работает, генерируя промежуточный набор результатов, содержащий пустую строку клиента, а также, возможно, соответствующую запись клиента , Мы сортируем по убыванию по клиенту, чтобы переместить нулевую строку во вторую позицию, если найден соответствующий клиент. Если совпадений не найдено, мы просто возвращаем пустую строку по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...