小弟遇到一个很麻烦的问题,举例说明一下
假如有3个表,A,B,C 
A中有2个字段id和a,通过关联A.a = B.a 可以找到b.tab,tab这个字段存的是一个表名,假设这个表名是C
我要通过A表中的id查询C表中的内容
sql语句如下
select b.tab from A inner join B on A.a = B.a (得到C)
select * from C where C.id = A.id我现在是做SAP系统对外的接口,SAP的native sql有点恶心,好像不能动态表名,也就是说我form关键字后面不能跟一个变量,我现在想到的是把sql语句写死,那样有多少表我就要写都少语句,感觉很笨重!另外一个很重要的问题就是效率问题,假如A,B表中有100万条记录,我就要根据A表中的id和B表中的表名去相应的表中查100万次,发送100万条sql我估计会很慢的,我想了一下,可以先把A,B做一个连接查询把所有记录查出来归类,获得B表中表名相同的记录,我把A表中的id拼一些字符串,用in语句来处理,不知道这样可行不,比如我select * form C where id in(...) 这个in里面的记录有数量限制么?1万个,10万个可以么?慢不慢?各位大哥还有没有别的办法,我想能动态表名,一条sql语句解决就好!

解决方案 »

  1.   

    不懂sap.
    查了以下:
    abap支持dynamic sql.
      

  2.   

    我可能没说清楚,问题重说一遍吧!表A结构如下:            
    id            ref 
    -------------------------- 
    001           x 
    002           y 
    002           z 表B结构如下:      
    ref_id            tab 
    -------------------------- 
    x           C 
    y           D 
    z           E 表C的结构: 
    id            ... 
    -------------------------- 
    001         ... 表D的结构: 
    id            ... 
    -------------------------- 
    002         ... 表E的结构: 
    id            ... 
    -------------------------- 
    003         ... 
    问题如下: 
    A是索引表,B是映射表,C,D,E三个表是主数据表,A表和B表的关联通过A.ref = B.ref_id,B中的tab字段存储的是具体的表名,我要根据A表中的id和B表中的tab去查询具体在C,D,E表中的内容 
    举个例子,A表中的第一条,关联到了B表中的第一条,通过B.tab我知道具体内容存在C表,我就根据A.id去C表中查询具体内容 我的问题是如果A表的数据量比较大,我不能一条一条的取再对于到其他表去查,这样效率很低,谁有好点的办法! 我所能够想到的是A和B表做连接查询,把查出来的B.tab归来,有多少个记录,我就写多少个sql语句,对于同一个归类的里面所有的A.id我可以拼个字符串,使用select * from C where in (...)的方式,我不知道in里面可以放多少内容,有没有数量限制!(  C, D, E表的结构相同  ) 谁还有更好一点的办法告诉我一下! 我是用sap系统对别的系统做接口,不能写存贮过程,求标准的SQl语句