我在MySQL中使用存储过程,带有CASE语句。
在CASE的ELSE子句中(相当于默认值:)我想选择并返回一个空结果集,从而避免因不处理ELSE情况而抛出SQL错误,而是返回一个空结果集,就好像常规查询不会返回任何行。
到目前为止,我已经设法使用以下内容:
Select NULL From users Where False
但是我必须命名一个现有的表,比如本例中的“users”。 它可以工作,但我更喜欢一种更优雅的方式,如果最终重命名或删除所使用的表名,它不会中断。
我已经尝试了Select NULL Where False
,但它不起作用。
使用Select NULL
不返回空集,而是返回一行,其中包含一个名为NULL且具有NULL值的列。
答案 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行。