2014-04-10 152 views
2

我有這個疑問:檢查查詢是NULL

SELECT sid FROM (SELECT * FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1 

有時內部查詢爲空。我想用0我想它來取代NULL,但它不工作:

SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1 

回答

2

您的意思是當沒有行where keyword ='tank'時子查詢將返回零行嗎?

這裏有一種方法可以解決這個問題:使用外連接,以便至少獲得一行,並將其與關鍵字='tank'的行集相匹配。如果沒有這樣的行,它仍然會從外連接的另一側返回一行。然後,您可以使用COALESCE()將sid默認爲虛擬零值。

SELECT sid FROM (
    SELECT COALESCE(myTable.sid, t.placeholder) AS sid 
    FROM (SELECT 0 AS placeholder) AS t 
    LEFT OUTER JOIN myTable ON keyword='tank' 
) AS InnerTmp LIMIT 1 
1

的問題是,如果你是sidNULL只是在測試,如果可以,SELECT 0,但如果沒有你」也重新選擇0。這是因爲如果IFNULL條件不滿足,它將返回0(FALSE)。

您必須使用IF子句並檢查ISNULL(sid)是否爲1(TRUE)。如果是這種情況,則SELECT 0其他SELECT sid

SELECT sid FROM (
    SELECT IF(ISNULL(sid), 0, sid) FROM myTable WHERE keyword='tank') AS InnerTmp 
    LIMIT 1