Mysql
 sql >> Database >  >> RDS >> Mysql

Esiste una query SQL che restituirà sempre zero risultati?

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