是否存在始终返回零结果的SQL查询?

max*_*axm 4 mysql sql database postgresql

如果有一个MySQL/PostgreSQL/Oracle特定的解决方案,我很好奇他们.

IMS*_*SoP 8

根据DBMS,以下一项或多项将起作用:

  • 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;
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中,您甚至可以创建一个没有列的表,允许您拥有零行和零列的结果集:

CREATE TEMP TABLE empty ();
SELECT * FROM empty;
Run Code Online (Sandbox Code Playgroud)

另一种可能性是,如果DBMS具有设置返回功能,则它们可能能够返回空集.例如,再次在PostgreSQL中,因为它是我最熟悉的,你可以给出一个无效的范围generate_series():

SELECT * FROM generate_series(0,-1);
Run Code Online (Sandbox Code Playgroud)