我在SQL中用了下面一条语句:
SQL.Add('select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from kq where rq>#'+strdate1+'#' +'and rq<#'+ strdate2+'#' +'and kh in (select * from yg where kq.kh=yg.kh and bm='''+ComboBox1.Text+''' and xm='''+ComboBox2.Text+''')order by sj');
   提示SQL语句中的子查询不能返回多个值,只能返回一个值。
   而用下面一条语句则,只能查到kh和sj两个字段,这该怎么改正呢?
SQL.Add('select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from yg,kq where rq>#'+strdate1+'#' +'and rq<#'+ strdate2+'#' +'and kq.kh=yg.kh and bm='''+ComboBox1.Text+''' and xm='''+ComboBox2.Text+''')order by sj');
我的表结构是这样的:表kq有字段:kh,rq,sj
                       表yg有字段:bm,xm,kh
   而我是所有字段都要啊,所以得两个表能过kh联起来,因为kq这个表中字段的值是从机子上读出来的,所以没办法改!

解决方案 »

  1.   

    用第二个语句是正确的,但你的语句好像有一点小问题
    SQL.Add('select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from yg,kq where rq>#'+strdate1+'#' +'and rq<#'+ strdate2+'#' +'and kq.kh=yg.kh and bm='''+ComboBox1.Text+''' and xm='''+ComboBox2.Text+''')order by sj');
                            ~~把这个)去掉
      

  2.   

    SQL.Add('select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from kq where rq>#'+strdate1+'#' +'and rq<#'+ strdate2+'#' +'and kh in (select * from yg where kq.kh=yg.kh and 
                                                  ^有错误吧
    bm='''+ComboBox1.Text+''' and xm='''+ComboBox2.Text+''')order by sj');
      

  3.   

    去掉也不行啊,一样的结果,只有KH和SJ两个字段,我该怎么改啊?
      

  4.   

    先试试这个语句
    select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from yg,kq where kq.kh=yg.kh 
    可不可以显示所有的字段。照理说你写的是对的呀
      

  5.   

    还是一样,是不是因为在RQ表中,是每一个KH的值对应多个SJ的值,而每个KH的值是对应一个XM的值
      

  6.   

    应该没有关系的
    你用的是access吗,把sql语句放到aceess里运行看结果怎样?
    select yg.bm,yg.xm,yg.kh,kq.rq,kq.sj from yg,kq where kq.kh=yg.kh