MYSQL Left-Join Table 选择数据问题 - 逻辑错误
MYSQL Left-Join Table Selecting Data Issue - Logic Error
我有以下 4 个表。
1. DEBATES.
[ID, STARTER_PACK_ID]
2. DEBATE_GROUPS.
[ID, DEBATE_ID, STAKEHOLDER_ID]
3. DEBATE_STAKEHOLDERS.
[ID, STARTER_PACK_ID, NAME]
4. DEBATE_STARTER_PACKS.
[ID]
我正在尝试 select 每个辩论组,其中包含每个利益相关者 ID、利益相关者姓名 ID 以及参与该辩论的利益相关者人数,其中 starter_pack_id 等于特定值。例如,必须显示这些,即使计数为 0 或存在空值
预期结果如下..
DEBATE_ID | STAKEHOLDER_ID | COUNT(Example)
-------------------------------------------
1 1 2
1 2 1
1 3 3
2 1 4
2 2 1
2 3 2
The issue is that it isn't showing the debates which haven't been used
in the database, which is what I required. What should I change in the code below to retrieve this information?
下面是我的尝试...
SELECT
a.id,
a.name,
a.abbreviation,
b.debate_id,
IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq,
COUNT(b.stakeholder_id) AS freq
FROM
debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id
GROUP BY
a.id, b.debate_id
HAVING
COUNT(*) < 3
ORDER BY
a.id,b.debate_id,b.stakeholder_id
SELECT
a.id,
a.name,
a.abbreviation,
d.id,
IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq,
COUNT(b.stakeholder_id) AS freq
FROM
debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id
RIGHT JOIN debates as d ON b.debate_id = d.id
GROUP BY
a.id, b.debate_id
HAVING
COUNT(*) < 3
ORDER BY
a.id,b.debate_id,b.stakeholder_id
我有以下 4 个表。
1. DEBATES.
[ID, STARTER_PACK_ID]
2. DEBATE_GROUPS.
[ID, DEBATE_ID, STAKEHOLDER_ID]
3. DEBATE_STAKEHOLDERS.
[ID, STARTER_PACK_ID, NAME]
4. DEBATE_STARTER_PACKS.
[ID]
我正在尝试 select 每个辩论组,其中包含每个利益相关者 ID、利益相关者姓名 ID 以及参与该辩论的利益相关者人数,其中 starter_pack_id 等于特定值。例如,必须显示这些,即使计数为 0 或存在空值
预期结果如下..
DEBATE_ID | STAKEHOLDER_ID | COUNT(Example)
-------------------------------------------
1 1 2
1 2 1
1 3 3
2 1 4
2 2 1
2 3 2
The issue is that it isn't showing the debates which haven't been used in the database, which is what I required. What should I change in the code below to retrieve this information?
下面是我的尝试...
SELECT
a.id,
a.name,
a.abbreviation,
b.debate_id,
IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq,
COUNT(b.stakeholder_id) AS freq
FROM
debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id
GROUP BY
a.id, b.debate_id
HAVING
COUNT(*) < 3
ORDER BY
a.id,b.debate_id,b.stakeholder_id
SELECT
a.id,
a.name,
a.abbreviation,
d.id,
IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq,
COUNT(b.stakeholder_id) AS freq
FROM
debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id
RIGHT JOIN debates as d ON b.debate_id = d.id
GROUP BY
a.id, b.debate_id
HAVING
COUNT(*) < 3
ORDER BY
a.id,b.debate_id,b.stakeholder_id