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