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);