0

关于如何使 MySQL 显示具有 0 条记录的行的结果,有很多问答,但它们都最多涉及 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。我已经尝试了左、右和内连接的每种组合(我知道内连接绝对不是解决方案,但我我很沮丧),只是看不出我哪里出错了。

任何帮助,将不胜感激!

4

2 回答 2

0

这是一个开始。我不能完全按照你的问题陈述。例如,cases 表的用途是什么?尽管如此,当您为这些表中的每一个说“所有”记录时,我将其解释为笛卡尔积 - 它是通过 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
于 2013-10-07T12:54:28.977 回答
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
于 2013-10-07T13:03:43.277 回答