需要仅获取sql要求的1条记录

时间:2017-04-10 15:49:24

标签: sql oracle

我有一个要求,我只需要为提供的id获取一条记录。 如果表中存在id,它将获取该特定记录,如果不存在,则将获取NULL值记录

实施例 表 - : demo_table

id
-----------
1
2
3
4
5
(null)

例如,如果我将id作为1传递它应该只返回第1行,同样如果我将id作为4传递它应该只获取第4行但是如果我传递的id不在表中,它应该给我是第6条记录,即NULL值记录。

我希望这是单一SQL查询。感谢您的帮助。 如果您需要更多信息,请与我们联系。

此外,没有ROWNUM,ROWID概念。应该在1个查询中,即没有MINUS,UNION等

4 个答案:

答案 0 :(得分:2)

 c = [[1, 4, 43], [2, 5, 25], [3, 10, 28]]

答案 1 :(得分:2)

如果我正确地得到了这个要求,你想要将ID改为NULL。

以下是一个非常简单的技巧:

SELECT MAX(id) FROM demo_table WHERE id = 4;

这将返回id 4,如果不存在,则返回NULL。鉴于您始终在WHERE子句中包含ID,MAX不仅仅为您处理NO ROWS FOUND

答案 2 :(得分:0)

尝试以下

    SELECT CASE WHEN id = 123 THEN 'NULL' ELSE id END id
  FROM (SELECT TO_CHAR (NVL (MIN (id), '123')) AS id
          FROM my_table
         WHERE id = 6)

更新1

SELECT CASE WHEN TO_CHAR (id) IS NULL THEN 'NULL' ELSE id END id,
       CASE WHEN ename IS NULL THEN 'NULL' ELSE ename END ename
  FROM (SELECT TO_CHAR (id) id, ename
          FROM my_table
         WHERE id = 6
        UNION
        SELECT NULL, NULL
          FROM DUAL
         WHERE NOT EXISTS
                  (SELECT id, ename
                     FROM my_table
                    WHERE id = 6))

答案 3 :(得分:0)

 select t.* from 
 ( select * from demo_table 
       where id = 4 or id is null) as t
 where t.id = 
  ( IF EXISTS(SELECT Id FROM demo_table WHERE ID = 4) 
             SELECT 4 
          ELSE 
             SELECT null )  ;