MySQL:从不同的表中获取包含名称的行数,两个表都相关

时间:2019-01-11 16:47:57

标签: mysql sql join group-by

我的数据库中有2个表,假设t1和t2。 两者都有2行。 1s是ID,第二个是Name

Table t1:
Id.       Name
1.         abc
2.         def
3.         ghi

Table t2:
Id.     Name
1.       abc
2.       abc
3.       abc
4.       def
4.       def

现在,我在MySQL中需要这种类型的输出

Total.        Name
3.                abc
2.                def
0.                ghi

到目前为止,我已经尝试过

Select Count(*) as Total, Name 
from t1 Inner Join 
     t2 
Group By t2.Name 
Having t1.Name = t2.Name

2 个答案:

答案 0 :(得分:0)

只需执行LEFT JOIN和聚合:

SELECT COUNT(t2.id), as total t1.name
FROM t1 LEFT JOIN
     t2
     ON t2.name = t1.name
GROUP BY t1.name;

答案 1 :(得分:0)

SELECT COUNT(t2.Id) as Total, t1.Name
FROM t1 LEFT JOIN t2
ON t2.Name = t1.Name
GROUP BY t1.Name;

与Yogesh相同的答案,但是正确设置了逗号和上限。

关于您所做的选择

Select Count(*) as Total, Name 
from t1 Inner Join 
     t2 
Group By t2.Name 
Having t1.Name = t2.Name

这是我的2美分

1st。),因为有两个具有相同列的表,您将收到模棱两可的列错误,因此您必须编写“ t1.Name”,而不仅仅是“ Name”

2nd。),并使用INNER JOIN选择始终,并且仅选择两个表中存在的行,这些行与联接的ON部分中的字段链接

3rd。)和HAVING子句不是将表链接在一起的适当方法,仅使用完整的JOIN语法以及ON和相应字段

希望能有所帮助。