【发布时间】:2016-12-16 08:21:29
【问题描述】:
我有 3 个表,它们是我的数据库的一部分。
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
COUNT(*) < 3
ORDER BY a.id,d.id
LIMIT 1
但这还没有完全计划好。
【问题讨论】:
-
到目前为止你尝试过什么?你应该包括这个,一些示例数据会更好。
-
那么辩论表有两个唯一的键?
id还有starter_pack_id?这是为什么呢? -
@ThorstenKettner 为什么在
LEFT JOIN中过滤掉记录?看看here. -
因为debates.starter_pack_id 是另一个表的外键,但与此解决方案无关。事实上,我不应该包括它。我会删除它
-
啊,好吧。您将其标记为“PK”。