0

多対多のリレーションシップを持つ少なくとも 3 つの異なるテーブルから結果を取得するクエリを作成しようとしています。

最終的には、ケース、結果、および苦情を一覧表示する表を作成したいと考えています。
すべてのケースで結果がまったくない場合もあれば、1 つまたは複数の結果がある場合もあります。同じ関係が苦情にも当てはまります。ケースを一度リストしてから、その後の列にそのケースに関連するすべての結果と苦情をリストできるようにしたいと考えています。GROUP_CONCATケースを繰り返すのではなく、1 つの列で結果を取得しようとしまし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 に答える