sql - 如果查询返回一行,如何选择一条记录,如果查询返回更多行,如何选择不记录?

标签 sql oracle

如果只有一行,我需要选择一行,如果有更多行,它应该选择 0 行。

最佳答案

如果您使用 PL/SQL,则使用 select-into 选择列会抛出 too_many_rows如果返回多于一行,则异常:

declare
  var table.column%type;
begin
  select column
  into   var
  from   table
  where  ...;
end;

如果您只想使用 SQL 执行此操作,则可以执行以下操作:
select *
from
  (select s.*, count(*) over () c
   from
    (select *
     from table
     where ...
     and   rownum <= 2
    ) s
)
where c = 1

更新

正如 DazzaL 在评论中所说,rownum <= 2 的原因如果结果集中的行超过 2 行,则限制是短路查询。如果数据集很大,这可以带来显着的性能优势。

关于sql - 如果查询返回一行,如何选择一条记录,如果查询返回更多行,如何选择不记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761175/

相关文章:

regex - 通过正则表达式从 Oracle 中的字符串中删除简单的 HTML 标签,需要解释

oracle - 如何让oracle sql结果按数字顺序排列

mysql - PL/SQL 语法到 MySQL 语法

mysql - SQL 查询中的奇怪逻辑

sql - 我想找到 'N/A' 值并用下一个值更新它

php - 脚本的这一部分对于 sql 注入(inject)是安全的吗?

C# ASP.net MVC 数据库问题

SQL - 如何为每个团队计算三个不同的百分比

java - 从 java 运行查询时不使用 oracle 中日期类型列的索引

java - JPA - 如何使用表默认值来生成主键?