小弟遇到一个很麻烦的问题,举例说明一下
假如有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语句解决就好!
假如有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语句解决就好!
解决方案 »
- 数据库学习大全
- select一条记录后想对这条记录记个数,用触发器如何实现
- Oracle 大数据量 order by排序性能,求高手出解决方案
- 求助,一个奇怪的sql问题
- oracle字符集的问题啊!
- 帮忙:由于不小心在ORACLE DBA中把用户表空间移去了,但是数据文件还在原来的目录,请问怎么恢复了,操作系统是WINDOWS2000
- 请问这个procedure有什么问题?
- 关于数据库当中跨用户建立触发器
- 在卸载完oracle后,重起后为什么仍有oracle的进程?
- 在oracle存储过程中返回多个多个count()结果
- Oracle查询不重复问题
- 请教一个sql loader 导入txt文件的问题!!
查了以下:
abap支持dynamic sql.
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语句