表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语句 
 

解决方案 »

  1.   

    对于同一个归类的里面所有的A.id我可以拼个字符串,使用select * from C where in (...)的方式
    这句怎么理解?
    你最好能举个简单的示例
      

  2.   

    例如
    id            ref 
    -------------------------- 
    001           x 
    002           y 
    003           z 
    004           x关联到B表就可以知道到id是001和004两个记录都存在于C表
    select * from C where in ('001', '004')
      

  3.   


    同意,Id里的子项目是有限制的,如果不要这个限制,in就要用子查询。
    你这里只要确定需要关联那个表的话,就可以直接做表关联就可以了,不需要用in呀比如现在看D表的记录select D.* from A, B, D where D.id=A.id and A.refid=B.refid and B.tab = 'D';这样行不行呀。
      

  4.   

    你的方法可以,我再考虑一下,按照你的方法我要多些一点sql语句(根据D,E,F..的数量决定),不过效率还可以