2017-04-10 63 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