麻烦各位把这条Oracle的SQL语句翻译成mysql的select a.id,a.name,a.age,a.sex,a.addr,b.name,b.age,b.sex,b.addr from aa a,(select bb.*,rownum r from bb) b where a.id=b.id and b.r<=? and b.r>=? order by a.id

解决方案 »

  1.   

    select a.id,a.name,a.age,a.sex,a.addr,b.name,b.age,b.sex,b.addr from aa a,(select bb.* from bb limit ?,?) b where a.id=b.id order by a.id不过要注意 limit ?,?中第一个?是偏移量,第二个?是行数
      

  2.   

    1、MYSQL没有 rownum函数,要用查询 OR 有自增字段的临时表解决;
    2、
    b.r <=? and b.r>=? 是变量?如果是,用CONCAT生成SQL语句,动态执行。
      

  3.   


    select a.id,a.name,a.age,a.sex,a.addr,b.name,b.age,b.sex,b.addr from aa a,(select * from bb) b where a.id=b.id order by a.id limit ?,?
    第一个?,起始记录
    第二个?,去记录条数
      

  4.   


    select aa.id,aa.name,aa.age,aa.sex,aa.addr,bb.name,bb.age,bb.sex,bb.addr from aa,bb where aa.id=bb.id order by aa.id limit ?,?
    第一个?,起始记录
    第二个?,去记录条数
      

  5.   

    set @rownum=0; 
    select 
      a.id,
      a.name,
      a.age,
      a.sex,
      a.addr,
      b.name,
      b.age,
      b.sex,
      b.addr 
    from 
      aa a,
      (select bb.*,@rownum:=@rownum+1 as r from bb) b 
    where 
      a.id=b.id 
    and 
      b.r <=? and b.r>=? 
    order by 
      a.id
      

  6.   

    MySQL中的ROWNUM的实现 
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
      

  7.   

    mysql> select * from shop;
    +---------+--------+-------+
    | article | dealer | price |
    +---------+--------+-------+
    |    0001 | A      |  3.45 |
    |    0001 | B      |  3.99 |
    |    0002 | A      | 10.99 |
    |    0003 | B      |  1.45 |
    |    0003 | C      |  1.69 |
    |    0003 | D      |  1.25 |
    |    0004 | D      | 19.95 |
    +---------+--------+-------+
    7 rows in set (0.00 sec)
    mysql> select s.*,(select count(*) from shop where concat(article,price)<=concat(s.article,s.price)) as rownum from shop s order by rownum;
    +---------+--------+-------+--------+
    | article | dealer | price | rownum |
    +---------+--------+-------+--------+
    |    0001 | A      |  3.45 |      1 |
    |    0001 | B      |  3.99 |      2 |
    |    0002 | A      | 10.99 |      3 |
    |    0003 | D      |  1.25 |      4 |
    |    0003 | B      |  1.45 |      5 |
    |    0003 | C      |  1.69 |      6 |
    |    0004 | D      | 19.95 |      7 |
    +---------+--------+-------+--------+
    7 rows in set (0.02 sec)
      

  8.   

    select a.id,a.name,a.age,a.sex,a.addr,b.name,b.age,b.sex,b.addr from aa a,(select bb.*,rownum r from bb) b where a.id=b.id and b.r <=? and b.r>=? order by a.id
    ---------------------
    关键就是一个行号的生成,msyq里面没有rownum,所以得自己生成:
    有2个方法可以考虑的:1、
    set @i =0;
    select a.*,@i:=@i+1 as rownum from tb_name a;2、
    select a.*, (select count(*) from tb_name b where b.关键字段=a.关键字段 and b.某一字段值<= a.某一字段值) from tb_name a;
    另外,你上面的?是在oracle里面的execute immediate部分用的绑定变量用法还是在程序里面调用的用法?