sql >> Databasteknik >  >> RDS >> Mysql

Finns det en SQL-fråga som alltid ger noll resultat?

Beroende på DBMS kommer en eller flera av följande att fungera:

  • SELECT NULL LIMIT 0 (PostgreSQL- och MySQL-syntax) / SELECT TOP 0 1 (MS SQL Server-syntax)
  • SELECT NULL WHERE FALSE (DBMS med en boolesk typ, t.ex. PostgreSQL) SELECT NULL WHERE 1=0 (de flesta DBMS:er)

För Oracle måste dessa ha formen SELECT NULL FROM DUAL , tror jag, eftersom du inte kan ha SELECT utan en FROM klausul av något slag; inte säker på vilka versioner av LIMIT / TOP och WHERE den kommer att acceptera.

Ett mer utarbetat alternativ är att skapa en (tillfällig) tabell och inte infoga några rader i den, vilket kan ge dig hur många kolumner som helst som kommer att ha typer associerade även om de inte innehåller några värden:

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

I PostgreSQL kan du till och med skapa en tabell utan kolumner, vilket gör att du kan ha en resultatuppsättning med noll rader och noll kolumner :

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

En annan möjlighet är om DBMS har set-returnerande funktioner kan de kanske returnera en tom uppsättning. Till exempel, igen i PostgreSQL eftersom det är det jag vet bäst, kan du ge ett ogiltigt intervall till generate_series() :

SELECT * FROM generate_series(0,-1);


  1. SQLT i 12c kan inte samla in statistik

  2. Använder pg_dump för att bara få infogningssatser från en tabell i databasen

  3. PL/SQL använder VARRAY i IN CLAUSE

  4. Topp 10 intressanta fakta och tips om MySQL