我有表 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 的项行,而是该行根本不存在。
是否有一种有效的方法来强制选择第一个表(项目)中的所有行?
最佳答案
您需要使用左外连接,这样对于没有子项的项您将得到 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
但是,有了这个,您将不会获得有关没有子项目的项目的任何信息(它们根本不存在于子项目表中)。
关于mysql - 统计table2的行不包括mysql中table1的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494835/