要求对这20多张表中的字段同时进行无规则的组合查询。应该怎么实现?谢谢。
19 个解决方案
#1
无规则的组合查询?没明白什么意思
#2
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
#3
你图上的一条线和一个箭头表示什么关系啊?
把这些表弄成一张大表
或者 取了哪个表的字段就在哪个表查询就是了
如果你这20几张表都有关联关系
那就用关联查询啊
把这些表弄成一张大表
或者 取了哪个表的字段就在哪个表查询就是了
如果你这20几张表都有关联关系
那就用关联查询啊
#4
那你就穷举这种可能性啊 用排列 不过比较繁琐!慎重考虑!
#5
是表示一对多的关系。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。
#6
把用户可能用到的字段建个视图
#7
你的意思是,把这20多张表建成一个视图吗?
#8
根据你的查询条件,最好拼接SQL语句,再查询
#9
20多个表怎么拼?
#10
LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。
#11
貌似只有 拼接SQL语句 的方法了吧..
#12
是的
#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关联
第一步:查询这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.拼接成完整语句。
拼接可以分三份,
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(表的列及类型信息),根据列的类型,动态创建输入值控件,比如:某一列为枚举即可创建一个下拉列表,某一列为日期,可创建日历控件等等,然后在查询新表的基础上按需求添加查询条件!
如果这个项目是刚开始做,而且不是在做统计的时候需要这个查询,我建议,表结构的设计可以重新考虑!
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
20多张表中的字段同时进行无规则的组合查询,这个设计也不合理!
#20
#1
无规则的组合查询?没明白什么意思
#2
组合查询指的是:用户的操作可能是在表1中取个字段,在表4中取个字段,在表23中取个字段,做为查询条件进行查询。
#3
你图上的一条线和一个箭头表示什么关系啊?
把这些表弄成一张大表
或者 取了哪个表的字段就在哪个表查询就是了
如果你这20几张表都有关联关系
那就用关联查询啊
把这些表弄成一张大表
或者 取了哪个表的字段就在哪个表查询就是了
如果你这20几张表都有关联关系
那就用关联查询啊
#4
那你就穷举这种可能性啊 用排列 不过比较繁琐!慎重考虑!
#5
是表示一对多的关系。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。
它们之间有主外键关系。
20多张表关联起来,速度是不是很慢啊,查询出来的结果是不是重复的太多了。
#6
把用户可能用到的字段建个视图
#7
你的意思是,把这20多张表建成一个视图吗?
#8
根据你的查询条件,最好拼接SQL语句,再查询
#9
20多个表怎么拼?
#10
LZ,你是不想实现这样一个效果
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。
首先23表有一定关系,用户可以任意挑选表,任意挑选字段,然后形成SQL语句,进行查询吧。。。
#11
貌似只有 拼接SQL语句 的方法了吧..
#12
是的
#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关联
第一步:查询这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.拼接成完整语句。
拼接可以分三份,
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(表的列及类型信息),根据列的类型,动态创建输入值控件,比如:某一列为枚举即可创建一个下拉列表,某一列为日期,可创建日历控件等等,然后在查询新表的基础上按需求添加查询条件!
如果这个项目是刚开始做,而且不是在做统计的时候需要这个查询,我建议,表结构的设计可以重新考虑!
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
20多张表中的字段同时进行无规则的组合查询,这个设计也不合理!