Инкапсулируйте запрос в подзапрос , чтобы преобразовать «без строки» в значение NULL.
Я проверял и проверял это с помощью PostgreSQL , SQL Server и MySQL . Также работает с SQLite .
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id;
В Oracle вы должны выбрать из фиктивной таблицы из 1 строки DUAL
следующим образом:
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM DUAL;
Вы можете сделать то же самое в MySQL по причинам совместимости, но вам не нужно.
Похоже на Firebird :
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM RDB$DATABASE;
Это делается для DB2 (например, Комментарий Шона ):
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM SYSIBM.SYSDUMMY1;
Альтернатива с UNION ALL
SELECT id FROM tbl WHERE id = 9823474
UNION ALL
SELECT NULL -- FROM DUAL -- for Oracle
FETCH FIRST 1 ROW ONLY;
Стандартный SQL, но я проверял это только с Postgres, который оценивает так:
Если в первом SELECT
найдена строка, она возвращается. Postgres прекращает поиск новых строк, как только первая найдена из-за LIMIT 1
(FETCH FIRST 1 ROW ONLY
).
Второй SELECT
выполняется даже в том случае, если первый ничего не возвращает. Тип данных значения NULL определяется типом данных tbl.id
автоматически.
О предложении LIMIT
: