A seconda del DBMS, funzioneranno uno o più dei seguenti:
SELECT NULL LIMIT 0
(Sintassi PostgreSQL e MySQL) /SELECT TOP 0 1
(Sintassi di MS SQL Server)SELECT NULL WHERE FALSE
(DBMS con un tipo booleano, es. PostgreSQL)SELECT NULL WHERE 1=0
(la maggior parte dei DBMS)
Per Oracle, questi dovranno essere del formato SELECT NULL FROM DUAL
, credo, dato che non puoi avere SELECT
senza un FROM
clausola di qualche tipo; non sono sicuro di quali versioni di LIMIT
/ TOP
e WHERE
accetterà.
Un'opzione più elaborata consiste nel creare una tabella (temporanea) e non inserire righe al suo interno, il che può darti un numero qualsiasi di colonne, a cui saranno associati tipi anche se non contengono valori:
-- 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;
In PostgreSQL puoi persino creare una tabella senza colonne, permettendoti di avere un set di risultati con zero righe e zero colonne :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;
Un'altra possibilità è che se il DBMS ha funzioni di restituzione di set, potrebbero essere in grado di restituire un set vuoto. Ad esempio, sempre in PostgreSQL poiché è quello che conosco meglio, puoi dare un intervallo non valido a generate_series()
:
SELECT * FROM generate_series(0,-1);