当我的sql没有行返回时,如何返回0?

时间:2019-06-26 18:47:21

标签: mysql sql database informix

select a, count (b) 
from table1 where b in ( select distict b from table2) 
and table1.dated>=DATE('yy/mm/dd') 
group by a;

在上面的SQL中,当我的count(b)> 0时,它返回列,但是当count = 0时,则不返回任何行

我确实尝试了UNION,NULLIF()和SELECT(SELECT())的尝试,但没有任何效果。

如果计数等于0,我期望返回0。

https://www.db-fiddle.com/#&togetherjs=2AkxeMUrPF

2 个答案:

答案 0 :(得分:3)

您可以使用:

select table1.a, count(DISTINCT table2.b) 
from table1
LEFT JOIN table2
  ON table1.b = table2.b
  AND table1.dated>=DATE('yy/mm/dd') -- this comparision is simply incorrect
group by table1.a

答案 1 :(得分:0)

我们可以通过确保查询返回行来确保查询返回。

下面是一个示例,该示例从内联视图i中仅检索一行。

然后外部联接到另一个内联视图s,该内联视图将获得不同的值列表。

然后再另一个外部连接到table1

SELECT t.a
     , COUNT(t.b) AS cnt
  FROM ( SELECT 1 AS n ) i 
  LEFT
  JOIN ( SELECT DISTINCT r.b 
           FROM table2 r
       ) s
  LEFT
  JOIN table1 t
    ON t.b      = s.b
   AND t.dated >= ...
 GROUP
    BY i.n
     , t.a

如果内联视图s不返回任何行,则查询应返回

 a      cnt
 ----   ---
 NULL     0