Этот заголовок жестокий, но я не знаю, как еще его выразить.
У меня есть таблица значений ключей, привязанная к user_id, в котором хранятся настройки пользователя по всему сайту.Если пользователь не заходил и не обновлял какие-либо из своих настроек, каждый раз, когда я спрашиваю ключ (скажем, «FAVORITE_COLOR», он будет нулевым, поэтому мне нужно получить настройку по умолчанию, которую я привязал к пользователю по умолчанию,user_id = 0.
Я думал в духе UNION'а, что user_id = 0 приводит к нижней части запроса, но это может привести к дублированию. Я не уверен, возможно ли это вообщеНо что бы я хотел сказать, что-то вроде:
SELECT val FROM k_v WHERE user_id = 123 AND k = 'FAVORITE_COLOR'
UNION IF val IS NULL
SELECT val FROM k_v WHERE user_id = 0 AND k = 'FAVORITE_COLOR';
Любой хороший способ сделать это?
Редактировать: Спасибо за помощь в этом. Есливаш вариант использования только захватывает одно значение, каков этот вопрос, тогда NVL от dual - это именно то, что вам нужно, но если вы планируете возвращать несколько пар в одном запросе, взгляните на некоторые другие ответы.поскольку они могут на самом деле иметь больше смысла для реализации.
Я согласился с предложением ZeissS, приведенным ниже, поскольку он простой, все еще один запрос, работает с несколькими парами k, v, и у меня нет проблем с выполнениемвозможная двойная фильтрация на стороне клиента.