2012-09-13 26 views
1

假設我有一個名爲references的表,它有兩個字段:一個id和一個引用字段。MySQL查詢 - 如果沒有找到條目,如何返回佔位符值而不是NULL

我想創建一個查詢,該查詢將爲我提供一個基於id的引用號。就像這樣:

SELECT reference 
    FROM references 
WHERE id = x 

(其中x是一些整數)

但是,如果ID沒有在表中找到我想查詢顯示-1,而不是NULL。

我該怎麼做?

SELECT COALESCE(reference, -1) FROM references WHERE id = x 

不起作用

回答

1

這裏有幾個方法:

SELECT COALESCE(MAX(reference), -1) 
    FROM references 
WHERE id = ... 
; 

SELECT COALESCE(reference, -1) 
    FROM references 
RIGHT 
OUTER 
    JOIN (SELECT 1 c) t 
    ON id = ... 
; 

SELECT COALESCE 
     ((SELECT reference 
       FROM references 
      WHERE id = ... 
     ), 
      -1 
     ) 
; 

(我去的第一個,個人,但所有三項工作。)

+0

+1,作爲第一個作品,最簡潔。 ) – raina77ow

+0

完美,謝謝。你能向我解釋爲什麼它有效嗎?COALESCE(reference,-1)不是?我沒看到它。 –

+0

@matbuckland:查詢'SELECT COALESCE(reference,-1)FROM引用WHERE id = ...'爲具有'id = ...'的'references'的每一行返回一條記錄。如果'references'沒有這樣的行,那麼'SELECT COALESCE(reference,-1)FROM引用WHERE id = ...'不會返回任何行。 – ruakh

1

如果子集具有cardinality 0(id = 2的元素),則沒有任何可比較的,確實存在這樣的(id = 2)元素不存在。另一方面,如果你想找到那個空子集中的最大元素,你會得到未知值(每個超集的成員將是上集和下集的空集)

我不是當然,如果這是正確的,但恕我直言,很合乎邏輯

相關問題