57

我在 MySQL 中使用带有 CASE 语句的存储过程。

在 CASE 的 ELSE 子句中(相当于默认:)我想选择并返回一个空的结果集,从而避免通过不处理 ELSE 的情况而引发 SQL 错误,而是像常规查询一样返回一个空的结果集不会返回任何行。

到目前为止,我已经设法使用类似的方法来做到这一点:
Select NULL From users Where False

但我必须命名一个现有的表,例如本例中的“用户”。它有效,但如果最终重命名或删除使用的表名,我更喜欢一种不会中断的方式。

我试过Select NULL Where False了,但它不起作用。

UsingSelect NULL不会返回一个空集,而是返回一个包含名为 NULL 的列且具有 NULL 值的行。

4

10 回答 10

49

MySQL 中有一个名为“dual”的虚拟表,您应该可以使用它。

select
    1
from
    dual
where
    false

这总是会给你一个空的结果。

于 2009-09-21T18:46:22.667 回答
29

这应该适用于大多数数据库,在 Postgres 和 Netezza 上测试过:

SELECT NULL LIMIT 0;
于 2013-11-07T22:27:01.103 回答
14

T-SQL (MSSQL):

SELECT Top 0 1;
于 2014-02-16T13:53:54.053 回答
7

怎么样

 SELECT * FROM (SELECT 1) AS TBL WHERE 2=3

检查了 myphp,它也可以在 sqlite 和任何其他数据库引擎中工作。

于 2010-06-01T12:02:45.493 回答
4

这可能适用于所有数据库。

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
于 2012-08-02T17:59:18.123 回答
3
SELECT TOP 0 * FROM [dbo].[TableName]

这是恒定扫描算子的合理做法。

于 2015-06-19T06:07:16.310 回答
3
SELECT NULL WHERE FALSE;

它适用于postgresql,mysql,mysql中的子查询。

于 2018-05-22T07:21:49.647 回答
2

这个怎么样?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
于 2009-09-21T18:57:22.393 回答
1
SELECT * FROM (SELECT NULL) WHERE 0
于 2012-08-21T23:59:51.947 回答
0

在 PostgreSQL 中,一个简单的

SELECT;

作品。您甚至不会得到任何标记为“未知”的列。
但是请注意,它仍然显示检索到 1 行。

于 2015-12-22T21:33:10.687 回答