我在SQL Server中有两个表:
物品:
Id int [PK]
Name varchar
TypeId int [FK -> ItemType.Id]
的ItemType :
Id int [PK]
ItemTypeName varchar
我需要阅读每个Items
属于ItemType
的数量,因此结果表应如下所示:
Item Type | Items Count |
----------+-------------+
Type A | 55 |
Type B | 21 |
Type C | 0 |
Type D | 0 |
到目前为止我尝试的是这个查询:
select
ItemType.ItemTypeName as [Item Type],
count(*) as [Items Count]
from
ItemType
inner join
Item on Item.TypeId = ItemType.Id
group by
ItemType.ItemTypeName
但它只显示Item Type
,其中至少存在1 Item
,而我需要显示已定义的所有Item Types
,即使没有Items
那种类型。
如何修改此查询以获得我想要的结果?
答案 0 :(得分:4)
您正在寻找left join
,但您还需要修复count()
:
select it.ItemTypeName as [Item Type],
count(i.TypeId) as [Items Count]
from ItemType it left join
Item i
on i.TypeId = it.Id
group by it.ItemTypeName;