如果有特定于MySQL / PostgreSQL / Oracle的解决方案,我会对它们全部感到好奇。
根据DBMS,以下一项或多项将起作用:
SELECT NULL LIMIT 0
SELECT TOP 0 1
SELECT NULL WHERE FALSE
SELECT NULL WHERE 1=0
SELECT NULL FROM DUAL我相信,对于Oracle,这些格式必须为形式,因为SELECT没有某种FROM子句就无法实现。不知道该版本LIMIT/TOP和WHERE它将接受。
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;
另一种可能性是,如果DBMS具有返回集合的功能,则它们可能能够返回空集合。例如,再次以PostgreSQL为我所知,您可以将无效范围指定为generate_series():
generate_series()
SELECT * FROM generate_series(0,-1);