0

我一直在尝试创建一个查询,该查询从至少三个具有多对多关系的不同表中提取结果。

我想最终得到一个列出案例、结果和投诉的表格。
所有案件都可能没有、一个或多个结果,同样的关系适用于投诉。我希望能够将案例列出一次,然后在后续列中列出与该案例相关的所有结果和投诉。我试图GROUP_CONCAT在一列中获得结果,而不是重复案例,但是当我UNION将结果和投诉结合起来时,一个列标题会覆盖另一个。

任何帮助表示赞赏,这里是小提琴http://sqlfiddle.com/#!2/d111e/2/0的链接

4

1 回答 1

0

我建议你从这个查询结构开始:

SELECT
        c.caseID, c.caseTitle, c.caseSynopsis /* if more columns ... add to group by also */
      , group_concat(co.concern)
      , group_concat(re.resultText)
FROM caseSummaries AS c 

LEFT JOIN JNCT_CONCERNS_CASESUMMARY AS JCC ON c.caseID = JCC.caseSummary_FK
LEFT JOIN CONCERNS AS co ON JCC.concerns_FK = co.concernsID

LEFT JOIN JNCT_RESULT_CASESUMMARY AS JRC ON c.caseID = JRC.caseSummary_FK
LEFT JOIN RESULTS AS re ON JRC.result_FK = re.result_ID

GROUP BY
        c.caseID, c.caseTitle, c.caseSynopsis /* add more ... here also */
;

将表格 caseSummaries 视为最重要的,然后其他所有内容都“挂起”。

请注意,虽然 MySQL 允许这样做,但您应该将包含在 select 子句中的每个非聚合列也放入 group by 子句中。

另见:http ://sqlfiddle.com/#!2/2d1a79/7

于 2014-10-19T12:13:18.860 回答