怎样对20多张表同时进行查询

时间:2021-09-29 09:26:35
表之间的关系如下图:
怎样对20多张表同时进行查询
要求对这20多张表中的字段同时进行无规则的组合查询。应该怎么实现?谢谢。

19 个解决方案

#1


无规则的组合查询?没明白什么意思

#2


组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。

#3


你图上的一条线和一个箭头表示什么关系啊?

把这些表弄成一张大表

或者 取了哪个表的字段就在哪个表查询就是了

如果你这20几张表都有关联关系

那就用关联查询啊

#4


那你就穷举这种可能性啊  用排列  不过比较繁琐!慎重考虑!

#5


是表示一对多的关系。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。

#6


引用 2 楼 study_now 的回复:
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
把用户可能用到的字段建个视图

#7


你的意思是,把这20多张表建成一个视图吗?

引用 6 楼 zhuomingwang 的回复:
引用 2 楼 study_now 的回复:
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
把用户可能用到的字段建个视图

#8


根据你的查询条件,最好拼接SQL语句,再查询

#9


20多个表怎么拼?

#10


LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。

#11


貌似只有 拼接SQL语句 的方法了吧..

#12


引用 10 楼 tashiwoweiyi 的回复:
LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。


是的

#13


如果是我上面所说的话,,,你做个功能好了...我给你一个步骤
第一步:查询这23张表,绑定在CheckBoxList  【可以加个全选】
SQL:select table_name from user_tables where table_name in ('表1','表2','表3','表4');

第二部:遍历CheckBoxList  拼接所有表如:string tableName = "'表1','表2','表3'";

第三步:根据用户选中的表,查询所有指标名称。标红的地方主要是去掉字段重复,所以加上表名点字段名.第二个标红的地方,可以用来做关键字判断.
select table_name, table_name||'.'||column_name as column_name  ,  nullable from user_tab_columns where table_name in (选中的所有的表[tableName])

第四步:把查询出来的所有指标,绑定到下一个CheckBoxList  中.

第五步:用户选择他所要查询的指标【可加全选】,至于表与表的关联,要么代码就写死,要么就是更具【nullable】来判断,要么自己在添加一张表,把表名,和主键名(也就是表与表的有关联的指标)添加进去,只用来关联作用。

第六步:拼接SQL语句。。用inner join关联

#14


代码都不难,就有一个地方,就是五步,看你如何关联,我推荐新添加一张表,把主键字段存进去。
拼接可以分三份,
1.遍历所要查询的指标,形成SQL 类似:"表1.字段1,表1.字段2,表2.字段1,表2.字段2"
2.遍历这表,形成 SQL语句中 inner join 这一部分。
3.拼接成完整语句。

#15


朋友,你的情况在排除表设计不合理的情况下,这么多表的关联只可能在做统计的时候会出现,做统计肯定会有一个范围(非即时数据),上面有提到过,表与表之间都存在主外键关系,因此,重复数数据完全可以排除,剩余的问题就是查询效率,这时候可以考虑使用临时表的原理:
1.创建一个过程,过程的功能为将这些表联合查询的结果插入到一张新表
  a.如果表不存在:CREATE TABLE NEW_TABLE AS  SELECT A.* FROM _VIEW A ;
  B.如果表存在:
    TRUNCATE TABLE NEW_TABLE;
    INSERT INTO NEW_TABLE VARLUES SELECT A.* FROM _VIEW  A;
2.直接从NEW_TALBE表里取数据,可按需求加条件;
3.按指定条件查询的功能,如果是给非专业人员使用,肯定会需要一个查询界面,把需要作为条件的字段存到一张表里,做一个中文的映射(显示字段),再结合系统数据字典USER_TAB_COLS(表的列及类型信息),根据列的类型,动态创建输入值控件,比如:某一列为枚举即可创建一个下拉列表,某一列为日期,可创建日历控件等等,然后在查询新表的基础上按需求添加查询条件!

如果这个项目是刚开始做,而且不是在做统计的时候需要这个查询,我建议,表结构的设计可以重新考虑!

#16


太复杂了,不过还要谢谢各位。
谁还有简单的方法啊

#17


做查询用的。

#18


拼接语句,也是把每一种情况都考滤在内!!的确写起来累!!

#19


引用楼主 study_now 的回复:
表之间的关系如下图:

要求对这20多张表中的字段同时进行无规则的组合查询。应该怎么实现?谢谢。

  20多张表中的字段同时进行无规则的组合查询,这个设计也不合理!

#1


无规则的组合查询?没明白什么意思

#2


组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。

#3


你图上的一条线和一个箭头表示什么关系啊?

把这些表弄成一张大表

或者 取了哪个表的字段就在哪个表查询就是了

如果你这20几张表都有关联关系

那就用关联查询啊

#4


那你就穷举这种可能性啊  用排列  不过比较繁琐!慎重考虑!

#5


是表示一对多的关系。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。

#6


引用 2 楼 study_now 的回复:
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
把用户可能用到的字段建个视图

#7


你的意思是,把这20多张表建成一个视图吗?

引用 6 楼 zhuomingwang 的回复:
引用 2 楼 study_now 的回复:
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
把用户可能用到的字段建个视图

#8


根据你的查询条件,最好拼接SQL语句,再查询

#9


20多个表怎么拼?

#10


LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。

#11


貌似只有 拼接SQL语句 的方法了吧..

#12


引用 10 楼 tashiwoweiyi 的回复:
LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。


是的

#13


如果是我上面所说的话,,,你做个功能好了...我给你一个步骤
第一步:查询这23张表,绑定在CheckBoxList  【可以加个全选】
SQL:select table_name from user_tables where table_name in ('表1','表2','表3','表4');

第二部:遍历CheckBoxList  拼接所有表如:string tableName = "'表1','表2','表3'";

第三步:根据用户选中的表,查询所有指标名称。标红的地方主要是去掉字段重复,所以加上表名点字段名.第二个标红的地方,可以用来做关键字判断.
select table_name, table_name||'.'||column_name as column_name  ,  nullable from user_tab_columns where table_name in (选中的所有的表[tableName])

第四步:把查询出来的所有指标,绑定到下一个CheckBoxList  中.

第五步:用户选择他所要查询的指标【可加全选】,至于表与表的关联,要么代码就写死,要么就是更具【nullable】来判断,要么自己在添加一张表,把表名,和主键名(也就是表与表的有关联的指标)添加进去,只用来关联作用。

第六步:拼接SQL语句。。用inner join关联

#14


代码都不难,就有一个地方,就是五步,看你如何关联,我推荐新添加一张表,把主键字段存进去。
拼接可以分三份,
1.遍历所要查询的指标,形成SQL 类似:"表1.字段1,表1.字段2,表2.字段1,表2.字段2"
2.遍历这表,形成 SQL语句中 inner join 这一部分。
3.拼接成完整语句。

#15


朋友,你的情况在排除表设计不合理的情况下,这么多表的关联只可能在做统计的时候会出现,做统计肯定会有一个范围(非即时数据),上面有提到过,表与表之间都存在主外键关系,因此,重复数数据完全可以排除,剩余的问题就是查询效率,这时候可以考虑使用临时表的原理:
1.创建一个过程,过程的功能为将这些表联合查询的结果插入到一张新表
  a.如果表不存在:CREATE TABLE NEW_TABLE AS  SELECT A.* FROM _VIEW A ;
  B.如果表存在:
    TRUNCATE TABLE NEW_TABLE;
    INSERT INTO NEW_TABLE VARLUES SELECT A.* FROM _VIEW  A;
2.直接从NEW_TALBE表里取数据,可按需求加条件;
3.按指定条件查询的功能,如果是给非专业人员使用,肯定会需要一个查询界面,把需要作为条件的字段存到一张表里,做一个中文的映射(显示字段),再结合系统数据字典USER_TAB_COLS(表的列及类型信息),根据列的类型,动态创建输入值控件,比如:某一列为枚举即可创建一个下拉列表,某一列为日期,可创建日历控件等等,然后在查询新表的基础上按需求添加查询条件!

如果这个项目是刚开始做,而且不是在做统计的时候需要这个查询,我建议,表结构的设计可以重新考虑!

#16


太复杂了,不过还要谢谢各位。
谁还有简单的方法啊

#17


做查询用的。

#18


拼接语句,也是把每一种情况都考滤在内!!的确写起来累!!

#19


引用楼主 study_now 的回复:
表之间的关系如下图:

要求对这20多张表中的字段同时进行无规则的组合查询。应该怎么实现?谢谢。

  20多张表中的字段同时进行无规则的组合查询,这个设计也不合理!

#20