选择没有行和没有列?

Posted

技术标签:

【中文标题】选择没有行和没有列?【英文标题】:SELECT no rows and no columns? 【发布时间】:2016-07-26 09:53:01 【问题描述】:

是否可以编写一个 SELECT 语句,返回零行零列的数据集?

【问题讨论】:

不,SELECT 至少返回 1 列。 如果您解释了turing-complete 标签,也许这个问题看起来很有用。 我无法想象没有列的结果集对任何事情都可能有用的任何情况:很难想象它甚至意味着,除了你已经没有查询任何内容...在这种情况下,您做了什么? @eggyal 在自动生成查询时,这将是一种不太需要担心的特殊情况。否则,您可能倾向于一直无条件地包含 NULL 列。 @binki:但是这样一个自动生成的查询必然是错误的,所以抛出一个错误比通过添加多余的列来掩饰它更正确。 【参考方案1】:

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

SELECT NULL;

编辑:

正如@eggyal 所指出的,上述语法将返回一个空行。

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

【讨论】:

这仍然有 1 行,select null from dual where false; 仍然包含单列,但没有行。 仅供参考,dual 如果(如此处)不需要引用任何表,则可以用作虚拟表。 @eggyal dual 是一个优雅的解决方案,比我给出的更简洁,它可以工作,但它并没有得到普遍支持。它适用于 Oracle 和 mysql(至少某些版本?),但不适用于 postgres。 @cazort:说句公道话,这个问题被标记为mysql……当然,拥有可移植的答案总是有帮助的!【参考方案2】:

在我看来不可能。您将获得至少一列,但没有行。

Select null from yourTable where 1 = 2;

【讨论】:

【参考方案3】:

这适用于 postgresql:


create table test22 ();
select * from test22;

【讨论】:

我想知道是否有任何方法可以将您的解决方案修改为不需要永久创建表的地方? 将其设为临时表?【参考方案4】:

它通常用于从现有表创建空表

CREATE TABLE NEW_TABLE_NAME AS
  SELECT * 
  FROM EXISTING_TABLE_NAME
  where 1=2

【讨论】:

【参考方案5】:

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

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

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

当存在在不同情况下不同的查询时,我使用了上述构造,然后是循环遍历结果的代码循环,并且在某些情况下您希望使其跳过循环。用上面的查询替换查询是一种返回空结果的方法,因此在没有if 块的情况下跳过循环。因为查询不包含表名,所以代码的这方面永远不需要更改,因此我更喜欢在现有查询中添加类似 WHERE false 的条件。

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

【讨论】:

以上是关于选择没有行和没有列?的主要内容,如果未能解决你的问题,请参考以下文章

基于行和列位置的 SQL UPDATE 值,没有 ID 或键

不能向没有列的 DataGridView 控件添加行.必须首先添加列.

SQL删除存在值的行和具有该值的后续列

2022-01-23:力扣425,单词方块。 给定一个单词集合 (没有重复),找出其中所有的 单词方块 。 一个单词序列形成了一个有效的单词方块的意思是指从第 k 行和第 k 列 (0 ≤ k < m

在 UNION 之后 MySql 没有更新

JavaFX:按行和列获取节点