有很多关于如何让MySQL显示具有0条记录的行的结果的Q& A,但它们最多都涉及1-2个表/字段。
我正在努力达到同样的目的,但是在3个领域中,我似乎无法得到它。
以下是我一起入侵的内容:
SELECT circuit.circuit_name, county.county_name, result.adr_result, count( result.adr_result ) AS num_results
FROM
(
SELECT cases.case_id, cases.county_id, cases.result_id
FROM cases
WHERE cases.status_id <> "2"
) q1
RIGHT JOIN county ON q1.county_id = county.county_id
RIGHT JOIN circuit ON county.circuit_id = circuit.circuit_id
RIGHT JOIN result ON q1.result_id = result.result_id
GROUP BY adr_result, circuit_name, county_name
ORDER BY circuit_name, county_name, adr_result
我需要看到的是第一列中的所有电路列表,第二列中每个电路的所有县列表,每个县的所有可能的adr_result条目列表(每个县都是相同的) )在第三列,然后是电路/县/结果组合的相应计数 - 即使它是0.我已经尝试了左,右和内连接的每个组合(我知道内在绝对不是解决方案,但我很沮丧,只是看不出我出错的地方。
任何帮助将不胜感激!
答案 0 :(得分:0)
这是一个开始。我不能完全遵循你的问题陈述。例如,案例表的目的是什么?尽管如此,当你为每个表说“ALL”记录时,我将其解释为笛卡尔积 - 它是通过FROM子句中的派生表实现的(注意该子句中缺少JOIN)
SELECT everthingjoin.circuit_name
, everthingjoin.county_name
, everthingjoin.adr_result
, COUNT(result.adr_result) AS num_results
FROM
(SELECT circuit.circuit_name, county.county_name, result.adr_result,
FROM circuit
JOIN county
JOIN result) AS everthingjoin
LEFT JOIN cases
ON cases.status_id <> "2"
AND cases.county_id = everthingjoin.county_id
LEFT JOIN circuit
ON everthingjoin.circuit_id = circuit.circuit_id
LEFT JOIN result
ON cases.result_id = result.result_id
GROUP BY adr_result, circuit_name, county_name
ORDER BY circuit_name, county_name, adr_result
答案 1 :(得分:0)
试试这个,看看它是否提供了一些想法:
SELECT
circuit.circuit_name
, county.county_name
, result.adr_result
, ISNULL(COUNT(result.*)) AS num_results
, COUNT(DISTINCT result.adr_result) AS num_distinct_results
FROM cases
LEFT JOIN county
ON cases.county_id = county.county_id
LEFT JOIN circuit
ON county.circuit_id = circuit.circuit_id
LEFT JOIN result
ON cases.result_id = result.result_id
WHERE cases.status_id <> "2"
GROUP BY
circuit.circuit_name
, county.county_name
, result.adr_result
ORDER BY
circuit_name, county_name, adr_result