【问题标题】:Is there an easy SELECT-Statement that creates an empty set?是否有一个简单的 SELECT 语句可以创建一个空集?
【发布时间】:2012-03-09 14:17:41
【问题描述】:

是否有一种简单易行的方法来创建具有指定列但零行的结果表?在集合论中,这称为空集,但由于关系数据库使用多维集,因此该术语并不完美。我试过这两个查询,但都只提供一行而不是零行:

  • 选择''作为 ID;
  • 选择空的 AS ID;

但我想要的是与此查询相同的结果:

  • SELECT ID FROM sometable WHERE false;

我正在寻找一种更优雅的方式,因为我不想涉及一个表,因此查询独立于任何数据库方案。此外,通用查询可能会更快一些(这对于这样的查询并不重要)。

【问题讨论】:

  • “空集”实际上并不是 MySQL 结果。它只会说“没有返回”,也没有表头。试试select 0 limit 0;

标签: mysql select set-theory


【解决方案1】:
SELECT "ID" LIMIT 0;

没有任何真实的表格。

请注意,大多数 (My)SQL 客户端只会显示“空集”。但是,它实际上可以满足您的要求:

create table test.test_table 
select "ID" limit 0;

show create table test.test_table\G

Table: test_table
Create Table: CREATE TABLE `test_table` (
  `ID` varchar(2) character set latin1 NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

【讨论】:

  • 谢谢。这正是我一直在寻找的。没有考虑 LIMIT 关键字。
【解决方案2】:
SELECT * FROM (SELECT NULL AS ID) AS x WHERE 1 = 0

【讨论】:

  • 正如我所解释的,我问是否有不涉及表格的方法。您的查询与我上面所说的查询完全相同,只是将“false”替换为“1=0”
  • 谢谢。也可以,但我更喜欢 LIMIT-Version,因为它更短。
【解决方案3】:

您可以使用DUAL 伪表。

SELECT whatever FROM DUAL WHERE 1 = 0

检查documentation(查找 DUAL 部分)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2013-04-30
    • 2021-08-19
    相关资源
    最近更新 更多