如何选择空结果集?

发布于 2024-08-04 22:13:51 字数 427 浏览 2 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

尤怨 2024-08-11 22:13:51

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

select
    1
from
    dual
where
    false

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

There's a dummy-table in MySQL called 'dual', which you should be able to use.

select
    1
from
    dual
where
    false

This will always give you an empty result.

冷情 2024-08-11 22:13:51

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

SELECT NULL LIMIT 0;

This should work on most DBs, tested on Postgres and Netezza:

SELECT NULL LIMIT 0;
感性不性感 2024-08-11 22:13:51

T-SQL(MSSQL):

SELECT Top 0 1;

T-SQL (MSSQL):

SELECT Top 0 1;
错爱 2024-08-11 22:13:51

在 myphp 中检查怎么样

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

,它也可以在 sqlite 中工作,并且可能在任何其他数据库引擎中工作。

How about

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

Checked in myphp, and it also works in sqlite and probably in any other db engine.

谈情不如逗狗 2024-08-11 22:13:51
SELECT NULL WHERE FALSE;

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

SELECT NULL WHERE FALSE;

it works in postgresql ,mysql, subquery in mysql.

淡淡の花香 2024-08-11 22:13:51

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

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

This will probably work across all databases.

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
爱给你人给你 2024-08-11 22:13:51
SELECT TOP 0 * FROM [dbo].[TableName]

这是恒定扫描运算符的合理方法。

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

This is a reasonable approach to constant scan operator.

Smile简单爱 2024-08-11 22:13:51

这个怎么样?

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

How about this?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
妄断弥空 2024-08-11 22:13:51
SELECT * FROM (SELECT NULL) WHERE 0
SELECT * FROM (SELECT NULL) WHERE 0
睫毛上残留的泪 2024-08-11 22:13:51

在 PostgreSQL 中,一个简单的

SELECT;

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

In PostgreSQL a simple

SELECT;

works. You won't even get any columns labeled 'unknown'.
Note however, it still says 1 row retrieved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文