Заполните отсутствующие значения столбца 1 для всех различных значений столбца 2, присутствующих в наборе данных

Таблица t выглядит следующим образом:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

key 2 имеет value подарок для week 1, 2 и 3, но key 1 имеет только value для week 1 и 2

Как написать запрос на добавление строки для key 1 и отсутствующей week 3 со значением по умолчанию value, равным 0, чтобы таблица результатов выглядела следующим образом:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   1 |    3 |     0 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

Я пробовал как кросс-соединения, так и полные внешние соединения (в разных списках недель), но почему-то не смог прийти к желаемому решению.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте cross join для создания всех строк, а затем left join для ввода значений:

select k.key, w.week, coalesce(t.value, 0) as value
from (select distinct key from t) k cross join
     (select distinct week from t) w left join
     t
     on t.key = k.key and t.week = w.week
order by k.key, w.week;

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

Спасибо Гордон!!! Не могли бы вы обновить приведенный выше запрос с исправленными псевдонимами, чтобы он не смущал других? (в настоящее время выдает ошибку) выберите kk, ww, объединение (t.value, 0) в качестве значения из (выберите отдельный ключ k из t) k перекрестное соединение (выберите отдельную неделю w из t) w левое соединение t на t.key = kk и t.week = ww упорядочены по kk, ww;

Denys 08.04.2019 12:30

@Деннис. . . Я удалил псевдонимы столбцов с одним символом. Это были опечатки.

Gordon Linoff 08.04.2019 13:25

Другие вопросы по теме