我有這個疑問:檢查查詢是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
我有這個疑問:檢查查詢是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
您的意思是當沒有行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
的問題是,如果你是sid
NULL
只是在測試,如果可以,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