我有这样俩个表
表a.dbf
年月           I        J      K     机器号
20051201       12       4      3     jq1
20051201       13       5      3     jq2
20051201       13       6      3     jq2
等等表b.dbf
I       J      K      含碱量
1       1      1      0.0200
2       1      1      0.3022
3       1      1      0.4022
.       .      .      .
.       .      .      .
.       .      .      .
12      4      3      0.3244
13      4      3      0.4522
.       .      .      .
13      5      3      0.2564我想在a表中一行一行的读取表中I  j  k 的值 ,然后和b表中的 I  J  K 的值进行比较
如果三个字段的值分别相等,读取b表中含碱量的值,生成这样的一个表( 按机器号排序)机器号   I    J    K   含碱量
jq1      12   4    3   0.3244
jq2      13   5    3   0.2564
我应怎样读取这俩个表,才能生成最后的那个表

解决方案 »

  1.   

    i, j, k 都要相等, 用不用 bde, 用的话可以用 inner joinSELECT a.机器号, a.i, a.j, a.k, b.含碱量
    FROM a
      INNER JOIN B ON (a.i = b.i) AND (a.j = b.j) AND (a.k = b.k)
      

  2.   

    我的表是用 ADO 连接的
      

  3.   

    那你用 ado query 作上面代码
      

  4.   

    adoquery3.close;
          adoquery3.SQL.Clear;
          adoquery3.ConnectionString:=srcstr;//这是我的连接串
          adoquery3.SQL.Add('select * from '+'a.dbf');
          adoquery3.Open;
    这样在表格里显示表的所有内容但把 你的select写在里面就出错了啊,为什么啊
      

  5.   

    a.dbf...
    那要起个别名 SELECT a.机器号, a.i, a.j, a.k, b.含碱量
    FROM a.dbf a
    INNER JOIN b.dbf B ON (a.i = b.i) AND (a.j = b.j) AND (a.k = b.k)
      

  6.   

    strpath:='d:\oildata.DBF';
      srcstr:=Form1.GetLinkSrc(strpath);//getlinkstrc()是个函数 就是连接表的驱动(老师给的没有问题的)  adoquery3.close;
      adoquery3.SQL.Clear;
      adoquery3.ConnectionString:=srcstr
     adoquery3.SQL.Add('a.机器号, a.i, a.j, a.k, b.含碱量');
     adoquery3.SQL.Add( 'FROM  a.dbf a');
     adoquery3.SQL.Add('INNER JOIN  b.dbf B ON (a.i = b.i) AND (a.j = b.j) AND (a.k =   b.k)' ); adoquery1.Open;
    这样改过没有错误出现了  
    但怎么不出查询结果啊 
    是不是与我的 连接表有关啊,象我那样好象只连接一个表啊,俩个表在一个目录下的我刚刚学习数据库2天 真是麻烦 您了啊 没有错误了 但不显示结果啊
      

  7.   

    strpath:='d:\oildata.DBF';
    刚刚写错了啊 
    是这样
    strpath:='d:\a.DBF';
      

  8.   

    SELECT a.机器号, a.i, a.j, a.k, b.含碱量
    FROM a
      INNER JOIN B ON (a.i = b.i) AND (a.j = b.j) AND (a.k = b.k)
     into 新表
    你要的是生成一个新表吧? 不知有没写错,嘿嘿~
    你的select 好像没看到哇?
      

  9.   

    哦 是忘记写了啊 程序里有
    adoquery3.SQL.Add('select a.机器号, a.i, a.j, a.k, b.含碱量');哦 只要把结果显示到stringgrid中就可以了
      

  10.   

    我看不到查询的结果
    adoquery3.SQL.Add('a.机器号, a.i, a.j, a.k, b.含碱量');
     adoquery3.SQL.Add( 'FROM  a.dbf a');
     adoquery3.SQL.Add('INNER JOIN  b.dbf B ON (a.i = b.i) AND (a.j = b.j) AND (a.k =   b.k)' );
    这样写进去是不是错了啊不显示查询结果
      

  11.   

    我觉得用INNER JOIN不行
    left jion应该可以
    select a.JQH,a.I,a.J,a.K,b.HJL 
    from a left join b 
         on a.I=b.I and a.J=b.J and a.K=b.k
    楼主可以试试
    再sqlserver中调试
      

  12.   

    对了
    我建的表
    a :jqh是主键
    b :I,J,K是联合主键
      

  13.   

    太可怕 给我你的邮箱啊
    我给你看看我写的代码
    我给俩个表 和那俩个表一样可能字段名不一样 但都有I J K 的(因为那俩个表我还没有建完呢?),先用老师给的表测试!!
    谢谢你啊 今天下午就要交了啊 
      

  14.   

    呵呵 好了啊 你的方法是对的啊
    谢谢了 
    我只能在dbgrid 中显示 我应如何在stringgrid 中 显示
    不过还是给分了啊 
    忙了这样久
      

  15.   

    晕, 在 dbgrid 中显示不就完了嘛, stringgrid 本质上就是一个 tstrings, 要代码 for, for 一行行加, 麻不麻烦, 咱数据库操作用 DBGrid 没错