В зависимост от СУБД, едно или повече от следните ще работят:
SELECT NULL LIMIT 0
(Синтаксис на PostgreSQL и MySQL) /SELECT TOP 0 1
(синтаксис на MS SQL Server)SELECT NULL WHERE FALSE
(СУБД с булев тип, напр. PostgreSQL)SELECT NULL WHERE 1=0
(повечето СУБД)
За Oracle те трябва да са във формата SELECT NULL FROM DUAL
, вярвам, тъй като не можете да имате SELECT
без FROM
клауза от някакъв вид; не съм сигурен кои версии на LIMIT
/ TOP
и WHERE
ще приеме.
По-сложна опция е да създадете (временна) таблица и да не вмъквате никакви редове в нея, което може да ви даде произволен брой колони, които ще имат свързани типове, въпреки че не съдържат стойности:
-- PostgreSQL
CREATE TEMP TABLE dummy ( a Int, b VarChar(42) );
SELECT * FROM dummy;
-- MS SQL Server
CREATE TABLE #DUMMY ( a Int, b VarChar(42) );
SELECT * FROM #DUMMY;
В PostgreSQL можете дори да създадете таблица без колони, което ви позволява да имате набор от резултати с нула редове и нула колони :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;
Друга възможност е, ако СУБД има функции за връщане на набор, те може да са в състояние да върнат празен набор. Например, отново в PostgreSQL, тъй като това е, което знам най-добре, можете да дадете невалиден диапазон на generate_series()
:
SELECT * FROM generate_series(0,-1);