2014-10-17 171 views
0

我一直试图创建一个查询,从至少三个不同的表中获取结果与多对多的关系。试图从四个创建一个表

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

知道的任何帮助,这里的链接小提琴http://sqlfiddle.com/#!2/d111e/2/0

+0

添加一些数据来caseSummaries有助于 – 2014-10-19 11:54:41

回答

0

我建议你用这个这个查询结构START:

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

+0

谢谢,由于原始数据的总结表我没加任何东西的情况下的时间和保密性。我只通过caseID进行分组,因为它仍然重复了由于某种原因添加其他字段的情况,并且我可以向group_concat添加第三个表,因此非常感谢您的帮助。 – 2014-10-23 10:55:59

+0

**“当我添加其他字段时,它仍会重复使用”**是的,SQL会重复值 - 这没有错,它是预期的,并且最终您会理解为什么我希望。要获得具有多行源数据的单行,您需要一些特殊的内容(如group_concat),这样做很好。干杯。 – 2014-10-23 10:59:31

+0

还有一个问题出现了,我现在已经把group_concat加倍了我的结果。我会张贴另一个小提琴,可能会把它放在一个新的问题 – 2014-10-23 11:58:27