如何在SQL中将两个表连接在一起?

时间:2011-03-26 21:03:20

标签: mysql sql

我有两张桌子。名称表有一个名为“categories”的外键。另一个表是包含类别名称的“类别”。名称表引用类别表中的类别。

所以我用这个:

$categories = "SELECT name, COUNT(*) category";
$number_of_categories = "SELECT category, COUNT(1) FROM name GROUP BY category";

如您所见,我正在做两个选择语句。我听说加入表可以做魔术,请教我如何在一个SELECT语句中执行此操作。

基本上我想从类别表中选择所有行,然后计算名称表中每个类别的实例数。

4 个答案:

答案 0 :(得分:3)

SELECT c.name, COUNT(n.category) AS count_in_name_table
FROM categories c
LEFT JOIN name n ON n.category = c.name
GROUP BY c.name

答案 1 :(得分:1)

您可以计算子查询中的名称数量:

select  category.name
,       (
        select  count(*)
        from    category
        ) as CategoryCount
,       (
        select  count(*)
        from    name
        where   name.category = category.name
        ) as NameCount
from    category

答案 2 :(得分:1)

假设类别表的名称是“Category”(带category_name和category_id),名称表的名称是“Name”(带有name_id和category_id):

SELECT C.category_name, COUNT(N.name_id) FROM Category C 
LEFT JOIN Name N ON C.category_id=N.category_id
GROUP BY C.category_name

分组允许您计算每个类别名称的所有名称条目。

答案 3 :(得分:0)

你可能设计不好。

  
      
  • 名称表有一个外键'categories'。
  •   
  • 'categories'-table包含类别的名称。
  •   
  • 名称表引用类别表中的类别。
  •   

两个表是否相互引用?或者它只是常见名称“名称”和“类别”的结果?

如果您有1:1关系,这意味着每个类别都有一个名称,每个名称都有一个类别,您可以将它们放在一个表中。

如果您有1:n关系,则一个类别绑定到多个名称,该关系将在类别表中指定。如果它是n:1关系,反之亦然。

我想我们需要一些样本数据或更多解释,才能真正得到帮助。