SELECT 没有行也没有列?

SELECT no rows and no columns?

是否可以编写 SELECT 语句,其中 returns 具有零行和零列的数据集?

我认为不可能。您将至少得到一列,但没有行。

Select null from yourTable where 1 = 2;

一个数据集总是至少有 1 列,即使它不包含任何数据。

SELECT NULL;

编辑:

正如@eggyal 所指出的,上面的语法将 return 一个空行。

他的查询 select null from dual where false; 不会 return 一行。

它通常用于从现有 Table

创建空 Table
CREATE TABLE NEW_TABLE_NAME AS
  SELECT * 
  FROM EXISTING_TABLE_NAME
  where 1=2

这适用于 postgresql:


create table test22 ();
select * from test22;

否,但可以 return 查询没有行。为了在不引用任何 table 的情况下执行此操作,您可以使用子查询:

SELECT NULL FROM (SELECT NULL) AS temp WHERE false;

此查询将有一个(空)列,但没有行。

我在不同情况下有不同的查询时使用了上面的构造,然后是循环遍历结果的代码循环,并且在某些情况下你想让它跳过循环。用上面的查询替换查询是一种 returning 空结果的方法,因此跳过没有 if 块的循环。因为查询不包含 table 名称,所以永远不需要更改代码的这方面,因此我更喜欢它而不是在现有查询中添加 WHERE false 之类的条件。

我更喜欢这个解决方案而不是引用 dual 的更简洁的解决方案,因为 PostgreSQL 不支持该构造;此解决方案适用于任何支持子查询的后端。