Технически, то, что вы хотите - это полное объединение таблиц. К сожалению, SQLite не поддерживает FULL JOIN
.
Существуют различные способы эмуляции решения. Для этого конкретного случая, однако, я думаю, что достаточно использовать LEFT JOIN
, чтобы получить всех людей. И затем UNION ALL
для ввода неизвестных:
select p.name, coalesce(sum(a.value), 0) value
from persons p left join
amounts a
on a.customerid = p.id and
a.month = 'Jan'
group by p.name
union all
select 'Unknown', sum(a.value)
from amounts a
where a.customerid is null;
Здесь - это дБ <> скрипка.
Первый запрос вводит всех клиентов, используя left join
, даже те, у кого нет сумм. Второе приносит в «неизвестность».