Sobes.tech
Назад к вопросам
Junior
5

Вы анализируете таблицу sessions, где status может быть 'success', 'failed', 'pending', и поле ended_at может быть NULL, если сессия не завершена. Вам нужно выбрать все незавершённые сессии, кроме тех, которые в статусе 'pending'. Что можно сказать о корректности следующего запроса? select * from sessions where ended_at is null and status != 'pending';

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

Запрос:

select * from sessions
where ended_at is null and status != 'pending';

имеет потенциальную проблему, связанную с обработкой NULL в условии status != 'pending'.

Если поле status может принимать значения 'success', 'failed', 'pending', то условие status != 'pending' вернёт TRUE для 'success' и 'failed', и FALSE для 'pending'. Но если в поле status могут быть NULL, то сравнение status != 'pending' вернёт UNKNOWN (не TRUE), и такие записи не попадут в выборку.

Если в таблице гарантированно нет NULL в поле status, то запрос корректен и выберет все сессии, у которых ended_at IS NULL (то есть незавершённые), и статус не равен 'pending'.

Если же NULL возможны, лучше явно обработать это, например:

select * from sessions
where ended_at is null and (status != 'pending' or status is null);

Итого, корректность зависит от наличия NULL в поле status. В остальном логика запроса соответствует условию: выбрать незавершённые сессии, кроме тех, что в статусе 'pending'.