Foxpro数据库
两个表:Table1(SEQ_CODE,Name……)  Table2(SEQ_CODE, Theme)
我想实现下面的查询:
Select * From Table1 Where SEQ_CODE In 
(Select Distinct SEQ_CODE From Table2 Where Theme Like 条件1 or Theme Like 条件2 or ……)
其中内层查询的“Or”条件很多,但是ADOQuery的SQL命令长度有限制,有时Theme的条件有上万条,所以这样写的SQL长度超过限制。
于是我想分几次查询,然后将查询结果合并。比如Theme有三个条件(每次的查询条件多少是不固定的,我这里就是举一个例子):
1、查询 Select Distinct SEQ_CODE From Table2 Where Theme Like 条件1;
2、查询 Select Distinct SEQ_CODE From Table2 Where Theme Like 条件2;
3、查询 Select Distinct SEQ_CODE From Table2 Where Theme Like 条件3;
上面的三次查询分别返回三个数据集,
4、将这三个数据集合并。
5、最后作最外层查询:Select * From Table1 Where SEQ_CODE In 刚才被合并的数据集;这个查询的过程我想我已经说得很明白了,但是我不知道这样应该如何实现!!
我现在的控件有ADOConnection1 ADOQuery1 DataSource1 DBGrid1(最后查询的结果显示在这里)。请问是不是还要加什么别的控件才能实现上述的查询过程?具体如何实现?还有就是你们知道SQL的长度限制是多少吗???希望回答问题的朋友说的详细一些,不要只说一些模棱两可的话,问题一解决我马上给分!!分数少了点大家见谅!!谢谢了!!!!!

解决方案 »

  1.   

    1、创建一个临时表#Temp;
    2、
    Insert into #Temp From (Select Distinct SEQ_CODE From Table2 Where Theme Like 条件1);
    Insert into #Temp From (Select Distinct SEQ_CODE From Table2 Where Theme Like 条件2);
    Insert into #Temp From (Select Distinct SEQ_CODE From Table2 Where Theme Like 条件3);
    3、
    Select * From #Temp Where ....大致如此 
      

  2.   

    用临时表,LEFT JOIN 或者UNION ALL
      

  3.   

    谢谢两位大哥,创建临时表确实是个不错的主意!还有一点我想问一下,我的是Foxpro数据库,(.DBF的文件)用SQL命令创建临时表的时候遇到了一个问题,
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('Creat Table #Temp(SEQ_CODE Character(30))');
    这样创建后的临时表的位置总是在我的程序的那个文件夹下,而没有被保存在我的数据库文件夹下,于是再写SQL命令涉及到临时表的时候就出错了,这个怎么解决?
    也就是说我创建的临时表怎样才能被保存到我的数据库文件夹下呢?
      

  4.   

    chenylin(陈SIR) 
    你那样写的SQL好像不对啊??!!