sql 2表查询问题

时间:2011-05-19 07:45:26

标签: sql join

我在数据库中有2个表。我使用以下查询:

Select U.id, U.ad, COUNT(B.id) AS 'total' 
FROM tblProducts U 
  INNER JOIN TblBasvurular B ON B.urunid=U.id 
GROUP BY u.id,u.ad

这告诉我

id   | productname   |  total
-------------------------------
1    | bread         | 2
2    | water         | 3
3    | milk          | 1

但我看不到其他产品。如果不存在,它不会告诉我其他人。

我怎样才能得到这样的结果:

id | productname | total
-------------------------------
1  | egg         | 0
2  | bread       | 2
3  | water       | 3
4  | tea         | 0
5  | milk        | 1

3 个答案:

答案 0 :(得分:3)

您没有指定您的RDBMS,但假设它是SQL Server:

select U.id, U.ad, COUNT(ISNULL(B.id, 0)) as 'total' 
from tblProducts U 
left join TblBasvurular B on B.urunid = U.id 
Group by u.id, u.ad

答案 1 :(得分:1)

目前尚不清楚,因为你没有向我们展示第二张桌子。 但是尝试在查询中将内部联接更改为左联接:

select 
U.id,
U.ad,
COUNT(B.id) as 'total' 
from tblProducts U 
left join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad

答案 2 :(得分:0)

使用LEFT JOIN:

select U.id,U.ad,COUNT(B.id)as 'total' 
from tblProducts U LEFT join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad

如果是Oracle,那么试试这个:

select U.id,U.ad,NVL(COUNT(B.id),0) as 'total' 
from tblProducts U LEFT join TblBasvurular B on B.urunid=U.id 
Group by u.id,u.ad

这将显示0而不是NULL。

如果是SQL Server,请使用ISNULL而不是NVL;如果是MySQL,请使用IFNULL。

对于所有这些RDBMS,函数coalesce都有效。