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