MySQL 从另一个表连接计数匹配的记录

标签 mysql

我有 2 个表,第一个表我希望它显示所有结果,没有“where”或任何限制它的东西。

第二个表我想将一个 id 与第一个表匹配,它可以有多个引用它的行所以我想计算数量。

假设第一个表是这样的:

ID - name
1  - one
2  - two
3  - three
4  - four

而第二张表是这样的

ID - REF
1  - 1
2  - 1
3  - 2
4  - 2
5  - 3
6  - 3
7  - 4
8  - 4

我想像这样组合它们:

ID - name - count
1  - one  - 2
2  - two  - 2
3  - three- 2
4  - four - 2

我尝试过使用子查询、左连接、右连接、内部连接、子查询连接、分组,十次中有九次我得到了我应该得到的 1300 个结果中第一个 ID 的 20 个结果。其余的我只得到一个不正确的计数而没有名字。

我觉得这是 MySQL 101,但在尝试了多种变体但一无所获后,我觉得一定有我遗漏的东西。

我很乐意被引导到一个完全相同情况下的问题(2 小时的查找,但没有任何东西完全像这样工作)或者一个简单的查询来指出这个方法的逻辑,提前致谢对于任何回答的人,你都会让我开心。

如果需要任何其他信息,请告诉我,我故意省略了查询,因为我已经对其进行了多次调整,以至于它不会有太大的相关性(我必须列出我尝试过的每个查询,那会很远滚动太多)

好的,我已经测试了第一个和答案,它似乎在这种情况下有效,所以我将扩展我的答案,问题是“已回答”,所以这只是一个扩展,如果没有回复我将用答案结束如下:

SELECT t.id, t.name, count(*) AS suppliers 
FROM #__tiresku AS t 
LEFT JOIN #__mrsp AS m ON t.name = m.tiresku_id 
GROUP BY t.id, t.name

扩展是一个内连接,我有另一个表更像是一个列表,它有一个 id 和一个名称,仅此而已,我用一个 id 引用该表来获取“名称”。

这可能有比连接更好的选择(比如外键或其他东西)。

我已将此添加到选择 b.name AS brand_name

然后加入 INNER JOIN #__brands AS b ON t.brand = b.id

使用子查询而不是加入

最佳答案

这是一个带有聚合的基本连接:

select t1.id, t1.name, count(*) as `count`
from table1 t1 join
     table2 t2
     on t1.id = t2.ref
group by t1.id, t1.name;

关于MySQL 从另一个表连接计数匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730288/

相关文章:

逗号之间的MySQL字符串搜索

mysql - SQL 查询未检索任何内容

php - MYSQL - 如何使用子选择连接进行连接

mysql - Doctrine - 具有自定义主键的ManyToMany

mysql - 具有两个表和多个数据和价格范围的复杂查询

MySQL:如何按范围分组然后分组?

mysql - 连接时 SQL 未知列

php - 将 MySQL 查询结果拆分为多维数组

MySQL : Select from table based on shape of arabic character in a column

java - 根据数据库查询返回的字符串,为 JTable 列中的所有单元格设置不同的背景颜色