DBMSに応じて、次の1つ以上が機能します。
-
SELECT NULL LIMIT 0
(PostgreSQLおよびMySQL構文)/SELECT TOP 0 1
(MS SQL Server構文) -
SELECT NULL WHERE FALSE
(ブール型のDBMS、例:PostgreSQL)SELECT NULL WHERE 1=0
(ほとんどのDBMS)
Oracleの場合、これらはSELECT NULL FROM DUAL
の形式である必要があります。 、SELECT
を使用することはできないので、私は信じています。 FROM
なし ある種の節; LIMIT
のバージョンがわからない / TOP
およびWHERE
受け入れます。
より複雑なオプションは、(一時的な)テーブルを作成し、そのテーブルに行を挿入しないことです。これにより、値が含まれていなくてもタイプが関連付けられる列をいくつでも指定できます。
-- 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;
PostgreSQLでは、列のないテーブルを作成することもでき、行と列がゼロの結果セットを作成できます。 :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;
もう1つの可能性は、DBMSにセットを返す関数がある場合、空のセットを返すことができる可能性があることです。たとえば、PostgreSQLでは、私が最もよく知っていることですが、 generate_series()
:
SELECT * FROM generate_series(0,-1);