简单描述:
现在有两个表,TB1和TB2,
TB1有COLUMN C11, C12,
TB2有COLUMN C21, C22;现在需要 在 TB2.C21 = TB1.C11,同时把最接近TB1.C12的TB2.C22 ,也就是在 TB1.C12 >= TB2.C22取最大的TB2.C22
 一起加入到表TB3
这样得到表TB3(C11, C12, C22)比如:
TB1
C11 C12
K1  1.5
K1  2.0
K2  1.9
K2  3.2TB2
C21 C22
K1  5.1
K1  2.1
K1  1.6
K2  2.0
K2  2.3
K2  3.3需要查到结果为TB3
C11 C12 C22
K1  1.5 1.6   //1.6最接近1.5,并且>=
K1  2.0 2.1
K2  1.9 2.0
K2  3.2 3.3

解决方案 »

  1.   

    vbman2003(家人) 
    给了
    select c11,c21,c22
    from tb1 t join inner (select c21,max(c22) as c22 from tb2 group by c21) s
    on t.c11=s.c21 and t.c12 >=s.c22但是结果是
    TB3
    C11 C12 C22
    K1  1.5 2.1   
    K1  2.0 2.1
    K2  1.9 3.3
    K2  3.2 3.3
      

  2.   

    create table TB3
    select TB1.C11,TB1.C12,(select C22 from TB2 where C22>TB1.C12 order by C22 LIMIT 1) as C22 from TB1;
      

  3.   

    mysql> select * from TB3;
    +------+------+------+
    | C11  | C12  | C22  |
    +------+------+------+
    | K1   | 1.5  | 1.6  |
    | K1   | 2.0  | 2.1  |
    | K2   | 1.9  | 2.0  |
    | K2   | 3.2  | 3.3  |
    +------+------+------+
    4 rows in set (0.00 sec)
      

  4.   

    我的是
    select aa.pk1, aa.va1, ss.va2, ss.va3
    from aa ,ss,  (select aa.pk1 as pk1, aa.va1 as va1, min(ss.va2) as va2
    from aa, ss
    where
    ss.fk1 = aa.pk1 and ss.va2 >= aa.va1
    group by  aa.va1, aa.pk1) s
    where
     aa.pk1 = s.pk1 and aa.va1 = s.va1
    and ss.fk1 = s.pk1 and ss.va2 = s.va2
      

  5.   

    wasuka(曲奇的吹火棍) ( ) 信誉:100    Blog   加为好友  2007-05-15 17:33:13  得分: 0  
     
     
       create table TB3
    select TB1.C11,TB1.C12,(select C22 from TB2 where C22>TB1.C12 order by C22 LIMIT 1) as C22 from TB1;
      
     能不能解释下mysql如何执行这个查询的?比较下效率,呵呵