【问题标题】:Counting children in another table for each row为每一行计算另一个表中的孩子
【发布时间】:2009-08-11 13:36:54
【问题描述】:

我有两张桌子:CATEGORYSUBCATEGORY

CATEGORY 的表结构

category_id         int(11)  
category_name       varchar(250) 
category_status     enum('0', '1')

SUBCATEGORY 的表结构

subcategory_id      int(10) 
subcategory_name    varchar(255)    
status              enum('0', '1')

例如,有一个名为 .NET 的 CATEGORY,它在 SUBCATEGORY 中有条目,例如 ASP.NET、VB.NET、C#.NET。在这种情况下,我需要使用 MySQL 将 CATEGORY 的计数设为 1,将 SUBCATEGORY 的计数设为 3。

我怎样才能做到这一点?

【问题讨论】:

  • 嗯?这令人困惑。请使用 SHOW CREATE TABLE 显示您的表架构。以下是一些有用的提示:stackoverflow.com/questions/1204402/…
  • 哇,埃里克,wtf?你似乎对那里的编辑有点过火了。为什么要更改他的介绍并删除初学者标签?
  • @hobodave:我认为beginner 标签是多余的,几乎毫无意义。如果您想讨论原因,请前往 Meta。除此之外,我更改了问题以修复语法。还注意到我错过了一个挥之不去的“我”,所以我也会改变它。 “我是新手”确实与回答问题无关。
  • 删除某人的问候以及最后的感谢似乎很迟钝。
  • @hobodave:查看 Meta 了解更多信息:meta.stackexchange.com/questions/2950

标签: sql mysql


【解决方案1】:

好吧,您可以使用子查询来做到这一点。但是,您需要将category_id 列添加到subcategory 表中,以便我们知道哪些子类别与哪些类别对应。然后,您可以通过以下查询得到您想要的:

select
    category_name,
    1 as CategoryCount,
    (select count(*) from subcategory where category_id = c.category_id) as SubCategoryCount
from
    category c

【讨论】:

  • 这正是我需要的 Eric.. 感谢您及时的帮助。
  • @Fero:很高兴为您提供帮助。随意将其标记为答案,因为我现在处于-1。它对那些疯狂的 Google 员工很有帮助。
  • +1 此解决方案有效。不知道为什么它早些时候被否决。
  • Eric.. 这是我在堆栈溢出的第一天.. 请你帮我如何将其标记为答案。
  • 就像这个问题一样?不,我们把它留给世界其他地方,这样他们就可以解决你遇到的同样的问题。
【解决方案2】:

由于我们可以假设类别计数为 1,并且两个表之间的 category_id 很可能存在键约束,所以这也可以:

select c.category_id, count(c.category_id) 
from category c
inner join subcategory s on (c.category_id = s.category_id)
group by c.category_id

【讨论】:

  • 不客气。您也可以通过单击每个答案左侧的向上箭头来对答案进行投票。 ;)
【解决方案3】:
SELECT COUNT(*) FROM CATEGORY;
SELECT COUNT(*) FROM SUB_CATEGORY;

我不相信这正是你想要的,但如果没有外键,这就是你真正能得到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多