В зависимост от СУБД, едно или повече от следните ще работят:
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);