sql >> Database >  >> RDS >> Mysql

Is er een SQL-query die altijd nul resultaten oplevert?

Afhankelijk van het DBMS werken een of meer van de volgende dingen:

  • SELECT NULL LIMIT 0 (PostgreSQL- en MySQL-syntaxis) / SELECT TOP 0 1 (MS SQL Server-syntaxis)
  • SELECT NULL WHERE FALSE (DBMS met een booleaans type, bijv. PostgreSQL) SELECT NULL WHERE 1=0 (meeste DBMSen)

Voor Oracle moeten deze de vorm hebben SELECT NULL FROM DUAL , geloof ik, omdat je SELECT . niet kunt hebben zonder een FROM clausule van een soort; niet zeker welke versies van de LIMIT / TOP en WHERE het zal accepteren.

Een meer uitgebreide optie is om een ​​(tijdelijke) tabel te maken en er geen rijen in in te voegen, wat u een willekeurig aantal kolommen kan geven, waaraan typen zijn gekoppeld, ook al bevatten ze geen waarden:

-- 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 kunt u zelfs een tabel zonder kolommen maken, zodat u een resultaat kunt instellen met nul rijen en nul kolommen :

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

Een andere mogelijkheid is dat als het DBMS set-retourfuncties heeft, ze mogelijk een lege set kunnen retourneren. Bijvoorbeeld, opnieuw in PostgreSQL, aangezien dit is wat ik het beste ken, kun je een ongeldig bereik geven aan generate_series() :

SELECT * FROM generate_series(0,-1);


  1. Booleaanse velden indexeren

  2. Sorteer op laatste 2 karakters string

  3. Meerdere rijen invoegen in één SQL-query?

  4. Combineer twee tabellen, sluit dezelfde records uit