2017-04-10 61 views
0

我有一个要求,我只需要提取的id只提取一个记录。 如果ID是存在于所述表将取回该特定的记录,并且如果它不存在时,将取回的NULL值记录需要只提取1条记录的SQL要求

例 表-1:demo_table

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

例如如果我传递id为1,它应该只返回第1行,类似如果我传递id为4它应该只提取第4行,但如果我传递id不在表中,它应该给我第6条记录即空值记录。

我希望这是在单个SQL查询。感谢您的帮助提前。 让我知道你是否需要更多信息。

另外,没有ROWNUM,ROWID的概念。应该在1个查询,即没有减号,UNION等

+0

当你说NULL值的记录,你只是想获取ID或有多个列?听起来就像你总是想要返回一行,如果ID不存在,你只想返回NULL而不是处理没有返回的行。 – gvenzl

回答

2

如果我正确你有要求而不是想要返回NULL的ID。

一个非常简单的窍门是:

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

,这样就会将返回ID 4,如果不存在,它将返回NULL来代替。鉴于您始终在WHERE子句中包含ID,MAX不会仅仅为您处理NO ROWS FOUND

+0

这将帮助我:) – user3721687

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)) 
+0

是的,我可以使用这一个谢谢:) – user3721687

+0

@ user3721687接受和upvote,如果你觉得这有用和正确的。 – user75ponic

+0

查询是正确的,但如果我需要获得完整的空行然后呢?如果有更多列,我需要获得第二列。 – user3721687

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) ; 
+0

如果'id = 4'不在表格中,那将不会返回任何内容。 –

+0

将无法​​工作兄弟,BCG如果我传递任何其他ID不在表中,那么它将不会获取任何记录。(NO_DATA_FOUND) – user3721687

+0

我已经编辑了答案,希望帮助 – puzeledbysql

2
SELECT * FROM 
(
    select id from demo_table where id = 4 
    union 
    select null from dual 
) 
where rownum = 1 
order by id DESC 
+0

我们不能使用rownum。 – user3721687

+0

没有公平 - 你在我回答 – AntDC

+0

是的时候增加了规定,但这是我们的要求,我们不能在查询中使用rownum。 我忘了提到,在说明中,所以现在 – user3721687