检查子查询是否为NULL

Cor*_*ell 3 mysql mariadb

我有这样的疑问:

SELECT sid FROM (SELECT * FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
Run Code Online (Sandbox Code Playgroud)

有时内部查询为 NULL。我想用 0 替换 NULL。我尝试了这个,但它不起作用:

SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
Run Code Online (Sandbox Code Playgroud)

Bil*_*win 5

您的意思是当没有关键字='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
Run Code Online (Sandbox Code Playgroud)