Sobes.tech
Junior

Was kann man über die Korrektheit der folgenden Abfrage sagen? select * from sessions where ended_at is null and status != 'pending';

sobes.tech KI

Antwort von 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'.