3

我有表 1,它表示具有列 ItemID 和列 ItemInfo 的项目。然后,我有表 2,它表示具有列 ItemID(父)、列 SubItemID 和列 SubItemInfo 的子项。

我正在尝试使用以下方法获取每个项目的所有子项目的计数:

select items.itemID, count(*) as count 
from items, subItems 
where subItems.itemID=items.itemID group by itemID

除了没有子项目的项目外,它工作正常。该行根本不存在,而不是返回子项计数为 0 的项行。

有没有一种有效的方法来强制选择第一个表(项目)中的所有行?

4

2 回答 2

3

您需要使用左外连接,对于没有子项的项目,您将得到 0,如下所示:

SELECT items.itemid,
       Count(subitems.subitemid) AS count
FROM   items
       LEFT JOIN subitems
              ON ( subitems.itemid = items.itemid )
GROUP  BY items.itemid

如果您想获得更好的性能,可以尝试以下查询:

SELECT itemid,
       Count(*) AS count
FROM   subitems
GROUP  BY itemid

BUT, with this one you will not get any info about the items, that have no subitems (they are simply not present within subitems table).

于 2012-09-19T12:43:59.477 回答
1
select items.itemID, count(*) as count 
  from items
  left join subItems on (items.itemID=subItems.itemID) 
group by itemID
于 2012-09-19T12:42:09.177 回答