sql >> Base de Datos >  >> RDS >> Mysql

¿Hay una consulta SQL que siempre devolverá cero resultados?

Según el DBMS, uno o más de los siguientes funcionarán:

  • SELECT NULL LIMIT 0 (Sintaxis de PostgreSQL y MySQL) / SELECT TOP 0 1 (sintaxis de MS SQL Server)
  • SELECT NULL WHERE FALSE (DBMS con un tipo booleano, por ejemplo, PostgreSQL) SELECT NULL WHERE 1=0 (la mayoría de los DBMS)

Para Oracle, estos deberán tener la forma SELECT NULL FROM DUAL , creo, ya que no puedes tener SELECT sin un FROM cláusula de algún tipo; no estoy seguro de qué versiones de LIMIT / TOP y WHERE aceptará.

Una opción más elaborada es crear una tabla (temporal) y no insertar filas en ella, lo que puede generar cualquier cantidad de columnas, que tendrán tipos asociados aunque no contengan valores:

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

En PostgreSQL, incluso puede crear una tabla sin columnas, lo que le permite tener un conjunto de resultados con cero filas y cero columnas :

CREATE TEMP TABLE empty ();
SELECT * FROM empty;

Otra posibilidad es que si el DBMS tiene funciones de devolución de conjuntos, es posible que pueda devolver un conjunto vacío. Por ejemplo, nuevamente en PostgreSQL, ya que es lo que mejor conozco, puede dar un rango no válido a generate_series() :

SELECT * FROM generate_series(0,-1);