如何选择空结果集?

时间:2009-09-21 18:40:18

标签: sql mysql stored-procedures null resultset

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

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

到目前为止,我已经设法使用以下内容: Select NULL From users Where False

但是我必须命名一个现有的表,比如本例中的“users”。 它可以工作,但我更喜欢一种更优雅的方式,如果最终重命名或删除所使用的表名,它不会中断。

我已经尝试了Select NULL Where False,但它不起作用。

使用Select NULL不返回空集,而是返回一行,其中包含一个名为NULL且具有NULL值的列。

10 个答案:

答案 0 :(得分:38)

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

select
    1
from
    dual
where
    false

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

答案 1 :(得分:17)

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

SELECT NULL LIMIT 0;

答案 2 :(得分:7)

怎么样

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

检查myphp,它也适用于sqlite,可能在任何其他数据库引擎中。

答案 3 :(得分:7)

T-SQL(MSSQL):

SELECT Top 0 1;

答案 4 :(得分:3)

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

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;

答案 5 :(得分:3)

SELECT TOP 0 * FROM [dbo].[TableName]

这是恒定扫描操作符的合理方法。

答案 6 :(得分:2)

这个怎么样?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'

答案 7 :(得分:2)

SELECT NULL WHERE FALSE;

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

答案 8 :(得分:1)

SELECT * FROM (SELECT NULL) WHERE 0

答案 9 :(得分:0)

在PostgreSQL中一个简单的

SELECT;

的工作原理。你甚至不会得到任何标有“未知”的栏目 但请注意,它仍然会检索 1行。