2015-11-20 27 views
1

我有一個名爲Users的表,其中有一個名爲Limit的列,其中包含整數值。每個用戶都有一個限制,但非註冊用戶的默認限制爲1.SQL Server ISNULL/Coalesce仍然返回空列表

我想運行一個簡單的查詢,告訴我如果用戶已註冊的限制,或者如果他們未註冊,則默認爲1用戶,但是當我運行無論是ISNULLCoalesce查詢書面如下:

SELECT coalesce(Limit,1) AS limit 
FROM User 
WHERE userID = 'testUser' 

查詢將正常工作,如果我對現有用戶的查詢,但如果我嘗試一個非註冊用戶將返回一個空列表[它應該返回值爲1的單行]。

使用ISNULL而不是coalesce會產生相同的結果。我找到的每個例子ISNULL和coalesce都是這樣看的。我錯過了什麼?

+1

分享表結構和樣本數據。我猜你的查詢沒有爲非註冊用戶返回任何行,所以一切正常,因爲它應該 – lad2025

+1

然後,在用戶表中不存在用戶聲音。有問題的用戶ID的簡單'SELECT *'返回什麼? –

+0

用戶表中不存在未註冊的用戶。具體來說,我會使用他們的IP作爲用戶ID [這將被存儲在另一個表中用於其他目的] – ConnorU

回答

6

​​3210對返回值進行操作,並評估它是否爲null。在你的情況下,一個不存在的公正沒有一個行,所以,正如你所說,它不會工作。

你可以,但是,模擬與左這種行爲加入:

SELECT COALESCE(b_limit, a_limit) AS limit 
FROM  (SELECT 1 AS a_limit) a 
LEFT JOIN (SELECT limit AS b_limit 
      FROM user 
      WHERE userID = 'testUser') b ON 1 = 1 
+0

'COALESCE(a_limit,b_limit)'將始終返回1.更改'COALESCE'內的順序 – lad2025

+1

@ lad2025 eap!確實!感謝您的注意。對我來說這是粗心大意的。 – Mureinik

+0

我在'b'附近收到錯誤的語法。錯誤...? – ConnorU

-1

可能是..如果子查詢結果爲空,則結果爲1

SELECT coalesce((SELECT Limit 
        FROM User 
        WHERE userID = 'testUser'), 1) AS limit 
+0

這是一個有趣的方法。乍一看,它似乎不起作用,但由於選擇返回沒有行是一個子查詢作爲一個列它將工作。 –

+0

如果子查詢不返回任何行值爲NULL並且結果COALESCE爲1 –