我有三个表是我的数据库的一部分。
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个利益相关者,所有辩论都针对这些利益相关者进行引用)。
我期望的结果是查询所有辩论,显示辩论 ID、辩论标题、辩论利益相关者名称以及在特定辩论中这些利益相关者出现的次数
,不考虑利益相关者数量是否为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
COUNT(*) < 3
ORDER BY a.id,d.id
LIMIT 1
但是并没有完全达到我的计划。
id
和starter_pack_id
?为什么会这样? - Thorsten KettnerLEFT JOIN
中记录被过滤掉了?请看这里。 - Tim Biegeleisen