我一直试图创建一个查询,该查询从至少三个具有多对多关系的不同表中提取结果。
我希望最终找到一个列出案例,结果和投诉的表格
所有案件可能没有,一个或多个结果,同样的关系适用于投诉。我希望能够列出一次案例,然后列出后续列,列出与该案例相关的所有结果和投诉。
我已尝试GROUP_CONCAT
将结果放在一列而不是重复这些案例,但当我使用UNION
来组合结果和投诉时,一列标题会覆盖另一列。
感谢任何帮助,这里是小提琴http://sqlfiddle.com/#!2/d111e/2/0
的链接答案 0 :(得分: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子句中。