Как получить несколько строк и если каких-то нет, то подставить по умолчанию?

У меня есть табличка settings:

create table settings (
  name text,
  value int
);

Со значениями:

insert into settings values ('A', 20), ('B', 30);

Мне нужно эти значения объединить в одну строку, и если нет значений, подставить по умолчанию. Пока я придумал следующее:

select a.value a_value, B.value b_value, COALESCE(C.value, 1) c_value from settings a
  left join settings B on B.name='B'
  left join settings C on B.name='C'
WHERE A.name='A';

Но у меня проблема в том, что если будет отсутствовать значение А, то результат будет нулевой. Как быть? Вот пример для потестить: http://sqlfiddle.com/#!17/6651a


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Как вариант:

select 
   coalesce(A.value, 11) a_value,
   coalesce(B.value, 22) b_value,
   coalesce(C.value, 33) c_value
from (values (1)) as t (v)
 left join settings A on A.name = 'A'
 left join settings B on B.name = 'B'
 left join settings C on C.name = 'C'
→ Ссылка