update czbtem set a13=czbtemp1.a11 from czbtem left join czbtemp1 on czbtem.dw=czbtem1.dw

解决方案 »

  1.   

    我的语句如下,可就是出错
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
     query1.close;
     query1.SQL.Clear;
     query1.sql.add('update czbtem set a13=czbtemp1.a11 from czbtem left join czbtemp1 on czbtem.dw=czbtem1.dw');
     query1.open;
    end;
    出错信息如下:
    Invalid use of keyword
    Token: Form
    Line Nunber: 1.
    请问我应该怎么处理,谢谢了!!
      

  2.   

    我又改成下面的语句了,还是出错,出错信息如上一样,请指教!
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
     query1.close;
     query1.SQL.Clear;
     query1.sql.add('update czbtem set a13=czbtemp1.a11 from czbtem left join czbtemp1 on czbtem.dw=czbtem1.dw');
     query1.execsql;
    end;
      

  3.   

    你的czbtem和czbtem1是同一个库里的两个表还是两个不同的库呢???
      

  4.   

    还有一个问题,到底是czbtem1还是czbtemp1
      

  5.   

    呵呵,是我写错了,应该是
    update czbtem set a13=czbtem1.a11 from czbtem left join czbtem1 on czbtem.dw=czbtem1.dw 
    再试试,可以了要加分哦
      

  6.   

    czbtem.db和czbtem1.db两个表的结构相同,都是在DELPHI里建立的表
    按你的语句我改过来了,但还是不行,再请看看,我是不是将语句写错了
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
     query1.close;
     query1.SQL.Clear;
     query1.sql.add('update czbtem set a13=czbtem1.a11 from czbtem left join czbtem1 on czbtem.dw=czbtem1.dw');
     query1.execsql;
    end;
    出错信息同前面一样
      

  7.   

    update 表1 set 表1.a13=表2.a11 from 表1 inner join 表2 on 表1.dw=表2.dw
    是肯定可以的
    你把这句sql放在sql环境下执行看看会不会出错,如果有错,应该是库名、表名或字段名不对.
    PS:我想了想,我觉得还是用 inner join 比较好
      

  8.   

    我的SQL放在SQL环境下执行也出错,但表名是对的,即表1 :czbtem.db和表2:czbtem1.db,而且两个表的结构完全相同,再请看看是怎么回事:
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
     query1.close;
     query1.SQL.Clear;
     query1.sql.add('update czbtem set a13=czbtem1.a11 from czbtem left join czbtem1 on czbtem.dw=czbtem1.dw');
     query1.execsql;
    end;
      

  9.   

    将left join 换成inner join同样出错。
    我的SQL放在SQL环境下执行也出错,但表名是对的,即表1 :czbtem.db和表2:czbtem1.db,而且两个表的结构完全相同,再请看看是怎么回事:
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
    query1.close;
    query1.SQL.Clear;
    query1.sql.add('update czbtem set a13=czbtem1.a11 from czbtem inner join czbtem1 on czbtem.dw=czbtem1.dw');
    query1.execsql;
    end;
      
      

  10.   

    将left join 换成inner join同样出错。
    我的SQL放在SQL环境下执行也出错,但表名是对的,即表1 :czbtem.db和表2:czbtem1.db,而且两个表的结构完全相同,再请看看是怎么回事:
    procedure Tczbprint1.Button1Click(Sender: TObject);
    begin
    query1.close;
    query1.SQL.Clear;
    query1.sql.add('update czbtem set a13=czbtem1.a11 from czbtem inner join czbtem1 on czbtem.dw=czbtem1.dw');
    query1.execsql;
    end;
      
      

  11.   

    //怎么还没有完呀//use czbtem in 0 excl alias czbtem1 //今年数据
    //sele czbtem
    Query1.Close;
    Query1.SQL.Text := 'SELECT * FROM czbtem';
    Query1.Open;//use czbtem1 in 0 excl alias czbtem  //去年数据
    //sele czbtem1
    Query2.Close;
    Query2.SQL.Text := 'SELECT * FROM czbtem1'
    Query2.Open;//do while not eof()
    while not Query2.Eof do begin
    //  dw_tem=dw
    //  a11_tem=a11
    //  sele czbtem
    //  locate for allt(dw)=allt(dw_tem)
    //  if not eof()
    //    repl a13 with a11_tem
    //  endif
      if Query1.Locate('dw', Query2['dw'], []) then begin
        Query1.Edit;
        Query1['a13'] := Query1['a11'];
        Query1.Post;
      end;
    //  sele czbtem1
    //  skip
      Query2.Next;
    enddo
      

  12.   

    算法你都已经知道
    怎么不能用Delphi写呢?
    要多看看书呀
    上面我是随便写的
    你修改修改就可以了
      

  13.   

      Query1['a13'] := Query2['a11'];
    //                      ~    
    //再看看这个东东可不可以!
      Query1.SQL.Text :=
    'update czbtem set a13=(select a11 from czbtem1 where dw=czbtem.dw)';
      Query1.ExecSQL;