日期:2014-05-16  浏览次数:20680 次

难倒一片大神的sql问题
有a,b两表,均有id,date字段,a表保存了完整的数列seq,b表描述了a表某段数列间的数据信息(seq_start,seq_end,seq_val),要求写一view生成一张根据b表描述标记a表的完整表,且数据不能有冗余

a表:
id    date     seq
1     2012/1/1 1
1     2012/1/1 2
1     2012/1/1 3
1     2012/1/2 1
1     2012/1/2 2
1     2012/1/2 3
2     2012/1/1 1
2     2012/1/1 2
...

b表:
id    date      seq_start    seq_end    seq_val
1     2012/1/1  2            3          'val1'
1     2012/1/2  1            2          'val2'
2     2012/1/1  1            2          'val3'
...
完成表: 
id    date      seq   seq_val
1     2012/1/1  1
1     2012/1/1  2     'val1'
1     2012/1/1  3     'val1'
1     2012/1/2  1     'val2'
1     2012/1/2  2     'val2'
1     2012/1/2  3
2     2012/1/1  1     'val3'
2     2012/1/1  2     'val3'
...
这个问题我自己就搞了一周,写了个用left join的view,on条件过于复杂结果慢的没法用,问了好多大神都被难倒的稀里哗啦的,要是csdn上没人搞那我就只能用存储过程自己整了

------解决方案--------------------
select a.*,b.seq_val
  from a a
  left join b b on a.id = b.id
               and a.date = b.date
               and a.seq >= b.seq_start
               and a.seq <= b.seq_end;

------解决方案--------------------
引用:
Quote: 引用: