二次查询怎么做?(100分)

  • 主题发起人 主题发起人 microwave
  • 开始时间 开始时间
M

microwave

Unregistered / Unconfirmed
GUEST, unregistred user!
用Query1查询到一组记录后,我想在这一组记录的基础上再进行查询,该如何做?
第一种办法:select * from ( select * from Table )
第二种办法:select a.* from ( select * from Table ) a
第三种办法:保存上次查询的SQL 语句为s1,在第二次查询时用:s1+' and 新条件 ';
都不行,
第一二种办法出错:Invalid use of keyword Token: select
第三种办法也出错,原因是我在第一次查询中使用了参数,在第二次查询中没有将参数传入,因为第一次查询是不定的,可能有参数,可能没参数,参数也是不定的。
我现在想要的是一个通用的二次查询的方法,即无论第一次查询的语句和结果是什么我都能在第一次查询得到的数据集上进行再一次的查询,请问该如何实现?
 
可以结合filter做
 
不行的,生成一个临时表吧,或者找一个关键字段。
select * from t1 where f1 in (select f1 from t1 where f2=???)
 
创建视图,即可。
 
定义一个全局变量 wherestr;局部变量newwherestr;
var wherestr:string;
....
var newwherestr:string;
......
二次查询:
query.close;
if wherestr<>'' then
begin
query.sql.text := 'select * from tablename +'where ('+wherestr+') and ('+newwherestr+')';
query.open;
wherestr := '('+wherestr+') and ('+newwherestr+')';
end;
 
select * from tablename
where exists (第一次查询的语句)
and 本次查询条件
 
to :microwave:

你用的是 Oracle 数据库吗?如果是这不难。
select * from
(select * from tablename1 ) as t1,
(select * from tablename2 ) as t2
where 查询条件
原理是将查询结果作为一个”表“
 
各种数据库方法都不一样
 
同意shangshang的想法
 
使用临时表方法的优点是速度快,但数据可能不准确,因为当你二次查询时,第一次查询
的结果可能已经变了。所以,看你的实际情况而定,如果你的数据变化量不大且客户对数据
的实时性要求不高可以这么做,相反,你可以使用嵌套查询的办法,把第一次与第二次的语
句进行合并。
 
s:=' select * from tablename where true ';
s:=s+你的参数
 
Select * From
(Select * From SysPara) A
Where 条件
我试了你得第二种方法是可以的,数据库是SQL Server2000
 
用FILTER就行了.
 
要看数据库,用第二种方法:
select a.* from ( select * from Table ) a MS SQL 和SYBASE或sql anywhere 支持。
其它大型数据库的语法稍有不同,这种方法最好,用视图多了不好。
 
microwave的意思是在第一次查询的结果上(不管实际的数据有何变化)做的查询。
以上的朋友的意见只有两种意见符合要求
1是FILTER
2是临时表
其他的方法都是要从数据库里重新查询一次。
 
后退
顶部