外部キーと主キー (基本) システムを使用してそれらの間で関連付けられているテーブルがいくつかあります。
いくつかの条件を考慮して、最後の「詳細な」テーブルの値を連結 (カンマ区切り) したいと考えています。
説明するのが難しいので、かなり明白だと思うドローを作成しました。
大きな画像はこちらにあります: http://tinypic.com/r/2ngdaah/6
注: tableEは、 tableDに示されている名前に対応する列名で既に作成されています。
ありがとうございました!
外部キーと主キー (基本) システムを使用してそれらの間で関連付けられているテーブルがいくつかあります。
いくつかの条件を考慮して、最後の「詳細な」テーブルの値を連結 (カンマ区切り) したいと考えています。
説明するのが難しいので、かなり明白だと思うドローを作成しました。
大きな画像はこちらにあります: http://tinypic.com/r/2ngdaah/6
注: tableEは、 tableDに示されている名前に対応する列名で既に作成されています。
ありがとうございました!
クエリを作成しましたが、正しいかどうかはわかりません。その理由は、あなたが説明した条件が記号 <= (以下) を使用し、その下の結果のためにちょうど = (等しい) のように見えるためです。
ただし、これを試してください:
select *
from (select id,
name,
max(case when e.tableD_id = 1 then e.agg_values else null end) alpha,
max(case when e.tableD_id = 2 then e.agg_values else null end) beta,
max(case when e.tableD_id = 3 then e.agg_values else null end) gamma
from tableA a,
(select b.tableA_id,
b.tableD_id,
group_concat(cast(c.value as char) order by c.id asc) agg_values
from tableB b,
tableC c
where c.tableB_id = b.id
group by b.tableD_id,b.tableA_id
having count(*) >= 3) e
where a.id = e.tableA_id
group by id, name
) n
where n.alpha is not null
and n.beta is not null
and n.gamma is not null
編集:
<= の代わりに >= を使用した条件をサポートするようにクエリを変更しました。
SQLFIDDLE: http://sqlfiddle.com/#!2/f28c8/1/0
SQLFIDDLE、最初の条件のみ: http://sqlfiddle.com/#!2/f28c8/4