mysql - 与 SQL 中的相关子查询作斗争

标签 mysql sql subquery

我有一个关于旧车、它们的所有者、事件以及这些事件的参与者的数据库:

所用表格的图像:

Image of tables used

主键:主键 FK:外键

现在我需要获取每个成员 (memberId) 参加的不同事件 (eventId) 的数量。 重要提示:成员(member)可以拥有多辆汽车,每辆汽车都可以参加事件。

这是我的一个尝试:

select m.memberId, count(a.eventId).
from members m where m.memberId in (select c.memberId from cars c where m.memberId =
    c.memberId and c.carId in
    (select d.carId from attendants a where c.carId = d.carId))
order by m.memberId

我也尝试过使用连接和分组来获得正确的结果,但我一无所获。 有谁知道我需要如何形成子查询才能获得所需的结果?

最佳答案

因此,您需要成员参加过的不同事件。成员(member)有车参加事件。由于不同的汽车可以参加相同的事件,因此您需要区分事件:

select m.memberId, count(distinct a.eventId)
from members m 
  join cars c on c.memberId = m.memberId
  join attendants a on a.carId = c.carId
group by m.memberId

关于mysql - 与 SQL 中的相关子查询作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339600/

相关文章:

sql - 在 ORDER BY 中使用 CASE 将一些记录推到最后

mysql - 将表中的两个时间范围合并为一个

mysql - 查找和替换记录 MySql 中的字符串

php - 如何在 Synology 上用 PHP 和 MYSQL 本地连接 MariaDB5?

php - SQL 子查询返回更多行和更多列

postgresql - Postgres - 简化基于日期的选择子查询的重复

JOIN 中的 MySQL LIMIT

mysql - 合并具有一对一关系的表

sql - 如何从 Sql Server 2016 表列中读取 JSON 文本

用于从 SQL 语句中的 from 子句中提取表名的 python 库,