2

外部キーと主キー (基本) システムを使用してそれらの間で関連付けられているテーブルがいくつかあります。

いくつかの条件を考慮して、最後の「詳細な」テーブルの値を連結 (カンマ区切り) したいと考えています。

説明するのが難しいので、かなり明白だと思うドローを作成しました。 画像

大きな画像はこちらにあります: http://tinypic.com/r/2ngdaah/6

注: tableEは、 tableDに示されている名前に対応する列名で既に作成されています。

ありがとうございました!

編集済み(フィドル):

http://sqlfiddle.com/#!2/f28c8/1/0

4

1 に答える 1

2

クエリを作成しましたが、正しいかどうかはわかりません。その理由は、あなたが説明した条件が記号 <= (以下) を使用し、その下の結果のためにちょうど = (等しい) のように見えるためです。

ただし、これを試してください:

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

于 2012-10-06T18:58:09.327 に答える