检查子查询是否为NULL

时间:2014-04-10 22:05:56

标签: mysql mariadb

我有这个问题:

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

2 个答案:

答案 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)

问题是,您只测试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