刚接触MYSQL ,在看到LOAD DATA INFILE中碰到问题。TABLE tb_xf
primary key(sid)
----------------------------------------------------
| sid |  jyje   | jyzh                 | ppfy |
|   1 |  160.00 | 62252*******0134    | 11.00 | 
|   2 |   70.00  | 40339*******1409    | 2.00 | 
|   3 |  60.00   | 40339*******0168    | 23.00 | 服务器上每天定时导入一个文件,实现如果sid无重复则插入,若有sid重复则更新 jyje,jyzh,但ppfy保持原来的值不变。在MYSQL参考手册上看到支持在LOAD DATA INFILE过程中使用变量或set子句(原文:您可以在SET赋值的右侧使用子查询。如果子查询可以返回一个值,并且此值将被赋予到一个列中,则此子查询只能是标量子查询。另外,您不能使用子查询从一个正在被载入的表中选择。)LOAD DATA INFILE 'data/file.txt' replace INTO TABLE tb_xf 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
(sid,jyje,jyzh) set ppfy= <这里该怎么来实现呢?>;请教大神指导。谢谢

解决方案 »

  1.   

    建议用LOAD DATA导入数据后,再用REPLACE INTO处理
     
      

  2.   

    这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。
      

  3.   

    这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 
    -----------------------------------------------------------------------------
    To:ACMAIN_CHM 
    感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy)。但都感觉太麻烦了。 
    set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。新手,这些都是我想的,不知道能否实现?
      

  4.   

    这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 
    -----------------------------------------------------------------------------
    To:ACMAIN_CHM 
    感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy),就不会覆盖原值了(我的目的就是更新指定的列值,保留指定列的值)。但都感觉太麻烦了。 
    set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。新手,这些都是我想的,不知道能否实现? 
      

  5.   

    这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 
    -----------------------------------------------------------------------------
    To:ACMAIN_CHM 
    感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy),就不会覆盖原值了(我的目的就是更新指定的列值,保留指定列的值)。但都感觉太麻烦了。 
    set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。新手,这些都是我想的,不知道能否实现?