关于LOAD DATA INFILE中的SET子句

xuuyaoo 2013-05-16 05:32:10
刚接触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= <这里该怎么来实现呢?>;

请教大神指导。谢谢
...全文
286 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuuyaoo 2013-05-16
  • 打赏
  • 举报
回复
这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。 类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 ----------------------------------------------------------------------------- To:ACMAIN_CHM 感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy),就不会覆盖原值了(我的目的就是更新指定的列值,保留指定列的值)。但都感觉太麻烦了。 set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。 新手,这些都是我想的,不知道能否实现?
xuuyaoo 2013-05-16
  • 打赏
  • 举报
回复
这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。 类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 ----------------------------------------------------------------------------- To:ACMAIN_CHM 感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy),就不会覆盖原值了(我的目的就是更新指定的列值,保留指定列的值)。但都感觉太麻烦了。 set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。 新手,这些都是我想的,不知道能否实现?
xuuyaoo 2013-05-16
  • 打赏
  • 举报
回复
这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。 类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。 ----------------------------------------------------------------------------- To:ACMAIN_CHM 感谢指导,之前有想这个方法,甚至想把表拆开外键关联,table(sid,jyje,jyzh),table(sid,ppfy)。但都感觉太麻烦了。 set不是用来更新原纪录的,是否有方法将即将更新行的纪录set赋值给要LOAD的记录,就达到目的了。 新手,这些都是我想的,不知道能否实现?
ACMAIN_CHM 2013-05-16
  • 打赏
  • 举报
回复
这个SET不是用来更新原记录的,仅是修改当前要LOAD的记录的值。 类似的解决方案是把这个文件先LOAD到一个TEMPX表中,然后再从TEMPX表去UPDATE目标表。
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
建议用LOAD DATA导入数据后,再用REPLACE INTO处理

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧