2014-01-12 352 views
0

如果select返回null,則需要返回值。然而,我發現了一個解決方案here通過將一個查詢的子查詢如果select返回null,則返回值

SELECT COALESCE((SELECT id FROM tbl WHERE id = 9823474), 4) AS id FROM RDB$DATABASE; 

上面的查詢將返回Null因爲值9823474並不存在於表中,但我想在這種情況下返回值(例4)所以我發現唯一的解決方案,使用select內部子查詢,然後COALESCE將工作,如果我沒有這樣做COALESCE也將返回Null

它是唯一的解決方案嗎?

+1

給我們更多關於你如何使用這個值的信息?你使用什麼編程語言? –

+0

目前還不清楚你的查詢應該做什麼。你能[編輯]更具體嗎?內部'SELECT'試圖從Tbl中獲得一個ID,並且如果沒有找到一個,則返回4,但是RDB $ DATABASE在哪裏適合等式?根本不需要,除非有什麼你不告訴我們。 –

+0

@AndrejKirejeŭ更多描述信息。我正在尋找SQL解決方案 – Wel

回答

2

不,這不是例如

Select first 1 id from (
    Select id FROM tbl WHERE id = 9823474 

    Union All 

    Select 4 from rdb$database) 

的唯一途徑或者你也可以使用匿名過程http://firebirdsql.su/doku.php?id=execute_block

EXECUTE BLOCK RETURNS (id integer) 
AS 
BEGIN 
     IF (EXISTS (SELECT * FROM tbl WHERE id = 9823474)) 
     THEN id = 9823474; 
     ELSE id = 4; 

     SUSPEND; 
END 

...人生總有許多方法有

+0

我的編輯拒絕! '返回'應該是'RETURNS',在'Exists'的周圍加括號並在末尾加上'suspend;' – Wel

+1

@歡迎是,與插入返回混合。關於暫停 - 僅從SP中選擇需要。但我不確定你可以從執行塊中選擇。對於我記得暫停的執行程序(單數結果)並不給任何東西。無論如何,我們沒有看到這個宏偉的畫面,爲什麼你想要它,以及你將如何使用它。 –

+0

我只需要一個解決方案,謝謝。 'Suspend;'需要'Returns' http://www.firebirdfaq.org/faq202/ – Wel