#sql #postgresql #subquery #window-functions #sql-null
#sql #postgresql #подзапрос #окно-функции #sql-null
Вопрос:
Как я могу выбрать все строки, которые имеют не совпадающую нулевую строку? Учитывая следующую таблицу, любая строка с внешним ключом 1 не должна быть возвращена, поскольку существует соответствующая строка с нулевым значением. Как я мог выбирать только строки с внешними ключами 2 и 3?
foreign_key | created_at
1 12345...
1 12345...
2 12345...
3 12345...
1 NULL
Комментарии:
1. Вы пытались
SELECT * FROM TableName WHERE created_at IS NOT NULL
?
Ответ №1:
Вы можете использовать not exists
:
select *
from mytable t
where not exists (
select 1
from mytable t1
where t1.foreign_key = t.foreign_key and t1.created_at is null
)
Другой вариант — использовать оконные функции; вот один из подходов, использующих логическое управление окнами:
select *
from (
select t.*, bool_or(created_at is null) over(partition by foreignkey) has_null
from mytable t
) t
where not has_null