显示一个表中的条目数,对于 SQL 中两个表共享的键,同时还包括在另一个表中没有位置的条目

Posted

技术标签:

【中文标题】显示一个表中的条目数,对于 SQL 中两个表共享的键,同时还包括在另一个表中没有位置的条目【英文标题】:Display the number of entries in one table, for a key shared by two tables in SQL while also including entries with no place in the other 【发布时间】:2015-03-19 23:05:14 【问题描述】:

我对 mysql 很陌生,所以还在学习。基本上,我目前拥有的是两张表:

表 1,人,有姓名、出生日期和电话号码。 表 2,会议,有名称、会议日期和会议时间。

两个表中“name”中的条目是相同的(尽管名字被多次提及),尽管表 1 有一个额外的名字,Paul,他没有安排会议(因此在表 1 中没有那个人的条目表 2)。

我想打印一个简单的 2 列结果显示:

名称 |会议次数

大卫 | 3

约翰 | 4

杰瑞 | 5

保罗 | 0

我可以打印出来:

大卫 | 3

约翰 | 4

杰瑞 | 5

使用

SELECT name, COUNT(*) as Number_Of_Meetings FROM meeting GROUP BY name;

虽然这仅在会议中真正使用了姓名数据,但在尝试打印出 paul 时并没有真正的帮助,因为他不包括在内。

使用 people 表我还可以做更复杂的事情

SELECT p.name, COUNT(*) as Number_of_Meetings FROM meeting m JOIN people p ON p.name = m.name GROUP BY p.name;

这会显示人员中的名称条目,但仅显示会议中具有条目的条目,但我一生无法弄清楚如何也显示

保罗 | 0

我尝试了很多选择,但老实说无法弄清楚。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

meetings 中没有任何匹配记录时,由于您想要来自people 表事件的所有记录,因此您需要使用left join

SELECT p.name, COUNT(m.name) as Number_of_Meetings 
FROM people p 
LEFT JOIN meetings m ON p.name = m.name 
GROUP BY p.name;

【讨论】:

以上是关于显示一个表中的条目数,对于 SQL 中两个表共享的键,同时还包括在另一个表中没有位置的条目的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]

SQL:选择另一个表中没有复合主键的条目

SQL:按行条目数排序并加入

是否可以根据表中的条目数将案例添加到 Select Case 中?

SQL表中两个条目之间的关联

MySQL 从具有重复引用条目的联合表中选择唯一记录