如何选择空结果集?
我正在 MySQL 中使用带有 CASE 语句的存储过程。
在 CASE 的 ELSE 子句中(相当于 default: ),我想选择并返回一个空结果集,从而避免通过不处理 ELSE 情况来引发 SQL 错误,而是像常规查询一样返回一个空结果集将不会返回任何行。
到目前为止,我已经成功地使用类似的方法来做到这一点:Select NULL From usersWhere False
但我必须命名一个现有表,例如本例中的“users”。 它有效,但我更喜欢一种即使最终使用的表名被重命名或删除也不会中断的方法。
我尝试过Select NULLWhere False
但它不起作用。
使用Select NULL
不会返回空集,而是返回包含名为 NULL 的列且具有 NULL 值的一行。
I'm using a stored procedure in MySQL, with a CASE statement.
In the ELSE clause of the CASE ( equivalent to default: ) I want to select and return an empty result set, thus avoiding to throw an SQL error by not handling the ELSE case, and instead return an empty result set as if a regular query would have returned no rows.
So far I've managed to do so using something like:Select NULL From users Where False
But I have to name an existing table, like 'users' in this example.
It works, but I would prefer a way that doesn't break if eventually the table name used is renamed or dropped.
I've tried Select NULL Where False
but it doesn't work.
Using Select NULL
does not return an empty set, but one row with a column named NULL and with a NULL value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
MySQL 中有一个名为“dual”的虚拟表,您应该能够使用它。
这总是会给你一个空的结果。
There's a dummy-table in MySQL called 'dual', which you should be able to use.
This will always give you an empty result.
这应该适用于大多数数据库,并在 Postgres 和 Netezza 上进行了测试:
This should work on most DBs, tested on Postgres and Netezza:
T-SQL(MSSQL):
T-SQL (MSSQL):
在 myphp 中检查怎么样
,它也可以在 sqlite 中工作,并且可能在任何其他数据库引擎中工作。
How about
Checked in myphp, and it also works in sqlite and probably in any other db engine.
它适用于 postgresql、mysql、mysql 中的子查询。
it works in postgresql ,mysql, subquery in mysql.
这可能适用于所有数据库。
This will probably work across all databases.
这是恒定扫描运算符的合理方法。
This is a reasonable approach to constant scan operator.
这个怎么样?
How about this?
在 PostgreSQL 中,一个简单的
工作。您甚至不会得到任何标记为“未知”的列。
但请注意,它仍然显示已检索到 1 行。
In PostgreSQL a simple
works. You won't even get any columns labeled 'unknown'.
Note however, it still says 1 row retrieved.