如果没有找到记录则返回一个值
我有一个有效的简单语句:
SELECT idnumber FROM dbo.database WHERE number = '9823474'
如果该数字不存在于表中的任何位置,则失败。我想在此声明中添加一些内容:
如果没有找到记录,则返回 NULL 而不是没有行。
有什么建议吗?
I have this simple statement that works:
SELECT idnumber FROM dbo.database WHERE number = '9823474'
If the number does not exist anywhere in the table, it fails. I would like to add something to this statement that says:
IF NO RECORD IS FOUND RETURN NULL INSTEAD OF NO ROW.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
将查询封装在子查询中,将“无行”转换为
null
值。我使用 PostgreSQL 对此进行了测试和验证, SQLite,SQL Server 和 MySQL。
在 Oracle您必须从虚拟 1 行表
DUAL
中进行选择:您可以在 MySQL 中执行相同的操作以实现兼容性原因,但你不必这样做。
类似 Firebird< /a>:
这对DB2(就像肖恩评论):
Encapsulate the query in a sub-query to transform "no row" to a
null
value.I tested and verified this with PostgreSQL, SQLite, SQL Server, and MySQL.
In Oracle you have to select from the dummy 1-row table
DUAL
:You can do the same in MySQL for compatibility reasons, but you don't have to.
Similar in Firebird:
This does it for DB2 (like Sean commented):
为了使其更简单,这应该可以正常工作。如果您根据 idnumber 的数据类型将其分配给变量,那么您将能够评估该值是 null 还是实际的 idnumber 返回。
To make it more simplier, this should work fine. If you assign this to a variable based on the datatype of your idnumber than you would be able to evaluate whether the value is null or the actual idnumber return.
结果 :
Result :
我将它用于 MySql
I use this for MySql
对我来说最简单的方法是使用古老的
IF THEN ELSE
技巧!适用于所有 SQL 风格。Simplest way for me was to use the good old
IF THEN ELSE
trick! Works with all SQL flavors.可以用 COALESCE
替换
0
与您希望在选择查询不返回任何行时返回的任何值。You can use COALESCE
Replace
0
with any value that you would like to return if the select query returns no rows.这是 Oracle 中的一个独立概念验证,它返回实际值而不是 NULL
在 Oracle 中,“双”表始终有一个名为“dummy”的列,其中包含“X”。因此,以下语句永远不会返回行。
因此,由于 nvl 函数,该语句将始终返回“NO RECORD FOUND”,
但是,如果您确实想要 NULL,则可以执行此操作(如上所述)
当然,请将上面的 select 语句与您自己的语句交换
Here is a standalone proof-of-concept in Oracle, which returns a real value instead of NULL
In Oracle, the "dual" table always has a column called "dummy" which contains 'X'. Therefore, the following statement will never return a row.
So this statement will always return "NO RECORD FOUND" thanks to the nvl function
but, if you really want NULL you can do this (as described above)
Of course, swap the above select statement with your own