如果存在,则显示匹配记录的SQL显示所有记录

时间:2014-03-26 11:52:58

标签: sql oracle

我想编写一个SQL查询来显示匹配的行(如果存在),否则显示所有记录。

实施例: - 输入数据: -

id

1

2

3

4

select * from table where id = 2 /* since id exits it should return id o/p 2 */


select * from table where id = 8/* since id doesn't exist it should return all the rows of table) 

即。 O / P

1

2

3

4

我想在SQL中严格执行此操作,不需要PL / SQL或任何编程块

2 个答案:

答案 0 :(得分:5)

select *
from table
where not exists (select id from table where id = 2) or id = 2

如果子查询没有返回任何记录,则表中所有记录的第一个条件为true,查询将返回所有记录。否则它是假的,我们只返回第二个条件为真的记录,即id = 2

答案 1 :(得分:1)

请尝试:

select 
    * 
from 
    table
where 
    id=nvl((select id from table where id=2), id)