W zależności od DBMS zadziała co najmniej jedno z poniższych:
SELECT NULL LIMIT 0
(Składnia PostgreSQL i MySQL) /SELECT TOP 0 1
(Składnia MS SQL Server)SELECT NULL WHERE FALSE
(DBMS o typie logicznym, np. PostgreSQL)SELECT NULL WHERE 1=0
(większość DBMS)
W przypadku Oracle muszą one mieć postać SELECT NULL FROM DUAL
, wierzę, ponieważ nie możesz mieć SELECT
bez FROM
jakiegoś rodzaju klauzula; nie wiem, które wersje LIMIT
/ TOP
i WHERE
zaakceptuje.
Bardziej rozbudowaną opcją jest utworzenie (tymczasowej) tabeli i nie wstawianie do niej żadnych wierszy, co może dać dowolną liczbę kolumn z powiązanymi typami, nawet jeśli nie zawierają żadnych wartości:
-- 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;
W PostgreSQL możesz nawet utworzyć tabelę bez kolumn, co pozwala uzyskać zestaw wyników z zero wierszy i zero kolumn :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;
Inną możliwością jest to, że jeśli DBMS ma funkcje zwracające zestaw, mogą one być w stanie zwrócić pusty zestaw. Na przykład ponownie w PostgreSQL, ponieważ jest to to, co znam najlepiej, możesz podać nieprawidłowy zakres generate_series()
:
SELECT * FROM generate_series(0,-1);