首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL左联接计数列连接3个表

MySQL左联接计数列连接3个表
EN

Stack Overflow用户
提问于 2016-08-10 05:44:49
回答 2查看 304关注 0票数 3

我有3张表是我数据库的一部分。

代码语言:javascript
复制
debates (id 'PK', unit_id, starter_pack_id 'FK', title)

debate_stakeholders (id 'PK', starter_pack_id 'FK', name)

debate_groups (id 'PK', debate_id 'FK', student_id, stakeholder_id 'FK')

为此目的,所有辩论都有相同的利益攸关方(总共有4个利益攸关方,所有这些利益攸关方都用于所有辩论)。

我的预期结果的目的是查询所有辩论,显示相对涉众的debates.id, debates.title, debate_stakeholders.name, and the Count of how many of those stakeholders occur within that particular debate,而不管涉众的计数是否为0。这个部分很重要,因为当我执行其他查询时,我需要知道哪些查询计数大于或等于1、0和null。

以下是我的数据库的示例数据:

我的预期结果:(计数只是为了显示它可能是什么样子)

我试图创建这个MySQL查询,但是我无法实现我的确切要求。

我尝试过像SELECT a.id, a.name, a.abbreviation, d.id AS debateId, IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq FROM debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id LEFT JOIN debates as d ON b.debate_id = d.id GROUP BY a.id, b.debate_id,d.id HAVING这样的查询

代码语言:javascript
复制
 `COUNT(*) < 3 ORDER BY a.id,d.id LIMIT 1`

但哈森并没有完全计划好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 08:06:59

我必须承认,桌子的名字把我弄糊涂了。debate__stakeholder与辩论无关。它是属于初学者包的涉众,也有属于初学者包的争论。至少这是我从表结构中读到的。然后,debate_由一名学生和一名参与辩论的涉众组成。把这称为一个团体是很奇怪的。

但是,您似乎希望将所有涉众与初始包中的所有辩论结合起来(即获得所有组合)。然后,您想要计算有多少学生与每一次这样的辩论/利益相关者组合有关。因此,编写一个查询来统计每个辩论和涉众(一个按辩论和涉众分组的聚合查询)的学生数量,并将其用作一个子查询--加入辩论/涉众组合。

代码语言:javascript
复制
SELECT d.id,
       d.title,
       ds.name,
       COALESCE(dg.students, 0) AS "count"
FROM debates d
JOIN debate_stakeholders ds
    ON ds.starter_pack_id = d.starter_pack_id
LEFT JOIN
(
    SELECT debate_id, stakeholder_id, COUNT(*) AS students
    FROM debate_groups
    GROUP BY debate_id, stakeholder_id
) dg
    ON dg.debate_id = d.id AND
       dg.stakeholder_id = ds.id;

演示这里:

SQLFiddle

票数 2
EN

Stack Overflow用户

发布于 2016-08-10 06:22:47

试试这个,希望这能帮上忙:

代码语言:javascript
复制
SELECT d.id, COALESCE(d.title, 'NA') AS title, COALESCE(ds.name, 'NA') AS name, COUNT(ds.id) AS count
FROM debates d
LEFT JOIN debate_groups AS dg ON d.id = dg.debate_id
LEFT JOIN debate_stakeholders AS ds ON dg.stakeholder_id = ds.id
GROUP BY d.id, dg.stakeholder_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38865114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档