<分区>
如果有针对 MySQL/PostgreSQL/Oracle 的解决方案,我对它们都很好奇。
<分区>
如果有针对 MySQL/PostgreSQL/Oracle 的解决方案,我对它们都很好奇。
最佳答案
根据 DBMS,以下一项或多项将起作用:
SELECT NULL LIMIT 0
(PostgreSQL 和 MySQL 语法)/SELECT TOP 0 1
(MS SQL Server 语法)SELECT NULL WHERE FALSE
(具有 bool 类型的 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;
另一种可能性是,如果 DBMS 具有返回集合的函数,它们可能会返回一个空集合。例如,再次在 PostgreSQL 中,因为这是我最了解的,你可以给 generate_series()
一个无效的范围。 :
SELECT * FROM generate_series(0,-1);
关于mysql - 是否存在始终返回零结果的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021915/