MySQL - 试图显示3列中有0条记录的行的结果

时间:2013-10-07 12:33:14

标签: mysql sql

有很多关于如何让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.我已经尝试了左,右和内连接的每个组合(我知道内在绝对不是解决方案,但我很沮丧,只是看不出我出错的地方。

任何帮助将不胜感激!

2 个答案:

答案 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