2014-10-17 95 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