Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine SQL-Abfrage, die immer Nullergebnisse zurückgibt?

Je nach DBMS funktionieren eine oder mehrere der folgenden Methoden:

  • SELECT NULL LIMIT 0 (PostgreSQL- und MySQL-Syntax) / SELECT TOP 0 1 (MS SQL Server-Syntax)
  • SELECT NULL WHERE FALSE (DBMS mit einem booleschen Typ, z. B. PostgreSQL) SELECT NULL WHERE 1=0 (die meisten DBMS)

Für Oracle müssen diese das Format SELECT NULL FROM DUAL haben , glaube ich, da Sie SELECT nicht haben können ohne FROM Klausel irgendeiner Art; nicht sicher, welche Versionen von LIMIT / TOP und WHERE es wird akzeptiert.

Eine ausgefeiltere Option besteht darin, eine (temporäre) Tabelle zu erstellen und keine Zeilen darin einzufügen, wodurch Sie eine beliebige Anzahl von Spalten erhalten können, denen Typen zugeordnet sind, obwohl sie keine Werte enthalten:

-- 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 können Sie sogar eine Tabelle ohne Spalten erstellen, wodurch Sie eine Ergebnismenge mit null Zeilen und null Spalten erhalten :

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

Eine andere Möglichkeit besteht darin, dass das DBMS, wenn es über Satzrückgabefunktionen verfügt, möglicherweise einen leeren Satz zurückgeben kann. Zum Beispiel können Sie in PostgreSQL, wie ich es am besten kenne, einen ungültigen Bereich für generate_series() :

SELECT * FROM generate_series(0,-1);