我有这个问题:
SELECT sid FROM (SELECT * FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
有时内部查询为NULL。我想用0替换NULL。我试过这个,但它不起作用:
SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
答案 0 :(得分:2)
你的意思是当没有关键字=' 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 :(得分: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