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 回答