mysql - 连接 3 个表时获取所有第一个表记录时出现问题

标签 mysql mysql-workbench

表是服务、计划、订阅。需求是获取Service表中的所有记录,但记录要按照订阅数最多的进行排序。我能够根据加入条件获取记录,但无法获取没有订阅的服务表中的记录。

请注意。每个服务记录都有一个计划。但可以有没有订阅的服务。

**Service**
service_id
service_name
status
is_active

**Plan**
plan_id
service_id
plan_name
plan_cost

**Subscribe**
subscribe_id
plan_id
person_name

SELECT DISTINCT s.service_id FROM service s JOIN plan p on s.service_id=p.service_id join
subscribe su on p.plan_id=su.plan_id WHERE
(s.status='Published' AND s.is_active=1) GROUP BY su.plan_id 
ORDER BY COUNT(su.subscribe_id) DESC

有人可以调查这个问题并提供帮助吗?

最佳答案

这可能应该是表之间的三向联接,通过订阅聚合,而不是按计划聚合。像这样的事情:

SELECT s.*
FROM service s
LEFT JOIN plan p
    ON s.service_id = p.service_id
LEFT JOIN subscribe su
    ON p.plan_id = su.plan_id
GROUP BY
    s.service_id
ORDER BY
    COUNT(su.subscribe_id) DESC;

如果您还想选择订阅计数,则可以将 COUNT(su.subscribe_id) 项添加到 select 子句中。请注意,在从 service 表中选择所有列时,单独按 service_id 进行聚合应该是有效的,假设 service_id 是其中的主键表。

关于mysql - 连接 3 个表时获取所有第一个表记录时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141081/

相关文章:

php - Voyager 安装 Laravel 上的外键约束格式不正确

php - 如何避免MySQL中的 "access denied"警告?

mysql - 将 sql 转储导入 mySQL Workbench 时出现错误 1305

mysql - 创建和运行存储过程的权限

mysql - 将 CSV 文件加载到 MySQL Workbench

mysql - 错误代码 : 1289. 'SHOW PROCEDURE|FUNCTION CODE' 功能已禁用;让它发挥作用

mysql - 如何使用与另一个表不同的条件将一个表连接到自身

php - 可以安全地更改大型数据库中的字段(表结构)

python - SQLAlchemy 查询过滤器行为在文档中令人困惑

mysql - 从两个表中选择并计算第三个