mysql - 统计table2的行不包括mysql中table1的所有行

标签 mysql

我有表 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/

相关文章:

mysql - Cpanel MySQL 远程创建/删除数据库

mysql:查询返回根据特定用户的分数排名

mysql - 如果 BEFORE 触发器产生错误,UPDATE 是否仍会执行?

mysql - yii 如何获取每个用户的最新日期记录

mysql - MDX 相当于 SQL 查询

mysql - 需要加入查询帮助

php - 选择在规范化表中具有多个匹配项的项目

mysql - Hash 和 salt MySQL 字段类型

python - 为 MySQL View 创建模型并加入它

php - 使用 PHP 将文本区域保存到数据库