我有一个销售主表(dd_b),一个销售明细表(dd_mx_b),它们的编号都是相同的。我想查出主表中某个部门某天的明细数据,用这个SQL语句却查不出(明细表是有相应数据的),
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from dd_mx_b where d_bh in(select c_num from dd_b where c_date=:rq and c_bm=:mca) ');
adoquery1.Parameters.ParamByName('rq').Value:=strtodate(dxdateedit1.Text);
adoquery1.Parameters.ParamByName('mca').Value:='化工';
adoquery1.Open;
我把子句中的(c_bm=:mca)去掉就能查询出相应数据,但我单独运行select c_num from dd_b where c_date=:rq and c_bm=:mca却又可以查询出相应数据,这是为什么?加上部门参数(c_bm=:mca)就查询不了,是不是我写错了什么?各位请指点一下

解决方案 »

  1.   

    adoquery1.SQL.Add('select * from dd_mx_b,dd_b where dd_mx_b.d_bh=dd_b.c_num and dd_b.c_date=:rq and dd_b.c_bm=:mca) ');试试!
      

  2.   

    adoquery1.SQL.Add('select * from dd_mx_b where d_bh in(select c_num from dd_b where convert(varchar(10),c_date,120)=:rq and c_bm=:mca) ');//如果你表中的数据是有时间的,那就该先把时间部分去掉,比较年月日,
    c_bm=:mca,这个条件,你其实很容易判断了。到底这里有没问题,你只要把这个sql放到表里面去查询就知道了。
      

  3.   

    應是參數取值的問題! =‘化工’ 可能取得不對,因為有些存在數據表中會有空格,用這個試一下:rtrim(c_bm)=:mca
    最好不要用漢字字段,用編號字段會好一些。
      

  4.   

    你的返回值中有null值,用IN查询只要返回值中有NULL值,查询结果即为空
    看看下边的帖子:
    http://blog.csdn.net/aiunong/archive/2006/02/22/606194.aspx
      

  5.   

    http://blog.csdn.net/aiunong/archive/2006/04/10/657080.aspx