有三张数据表:ENG(其中含ENG_SN 和ENG_TYPE两个字段),aircraft(其中含AC_ID 和AC_TYPE两个字段),Time(其中含ENG_SN和AC_ID两个字段),现在要从Time表中查询ENG_SN和AC_ID,ENG_SN必须是ENG表中符合条件ENG_TYPE=:ENG的ENG_SN,AC_ID必须是aircraft表中符合条件AC_TYPE=:AC的AC_ID),ENG,AC是参数。Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select ENG_SN ,AC_ID from Time');
Query_X.SQL.Add('where ENG_SN in');
Query_X.SQL.Add('(select ENG_SN from ENG where ENG_TYPE=:ENG)');
Query_X.SQL.Add('and AC_ID in');
Query_X.SQL.Add('(select AC_ID from aircraft where AC_TYPE=:AC)');
Query_X.ParamByName('ENG').AsString:='canshu1';
Query_X.ParamByName('AC').AsString:= 'canshu2';
Query_X.Prepare;
Query_X.Open;
最后执行的结果显两个where语句没有起作用,所有的记录都被选出来了。请问怎样写语句才能达到我所要求的结果呢?

解决方案 »

  1.   

    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('Select ENG_SN ,AC_ID from Time');
    Query_X.SQL.Add
    ???
    是不是写错了!!
    不过从你的语句看好像没错!!!
      

  2.   

    我又这样改写,还是不行。where语句起不到作用,Time表中的所有记录都被选出来了。
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('Select Time.ENG_SN ,Time.AC_ID from Time,ENG,aircraft');
    Query1.SQL.Add('where Time.ENG_SN=ENG.ENG_SN and Time.AC_ID=aircraft.AC_ID and ENG.ENG_TYPE=:E and aircraft.AC_TYPE=:AC');
    Query1.ParamByName('E').AsString:='canshu1';
    Query1.ParamByName('AC').AsString:='canshu2';
    Query1.Prepare;
    Query1.Open;
    朋友们再帮我想想办法啊!
      

  3.   

    先在数据库中跑跑,作个短点,看一下SQL是否你要的,
      

  4.   

    谢谢各位,我已经解决问题。原因是数据库本身有点问题,方法没错。另外如果是在SQLServer数据库中参数前要加上@符号,我的是Oracle,不用加的。结帖!谢谢你们。
      

  5.   

    谢谢各位,我已经解决问题。原因是数据库本身有点问题,方法没错。另外如果是在SQLServer数据库中参数前要加上@符号,我的是Oracle,不用加的。结帖!谢谢你们。