sql 排重方法

无伤 2014-10-16 11:13:50
现在我遇到这样一个问题:数据库有一张表(User)里面有几个字段是唯一索引比方说有两个字段(name,id)是唯一索引。现在我的程序有批量导入的功能比方说一次导入1000条记录,我需要导入数据库前在程序里判断这些数据是否在数据库里已经存在。目前实现的方法有两个:
一、对每一条数据做精确查询。如:select 1 from User where name='xx' and id=123; 这种做法效率比较低,而且需要方法数据库n次;

二、将这两个索引字段拼成in里的元素使用一条sql查询。如:select 1 from User where name in ('x1','x2','x3',.......) and id in (1,2,3,.......) .这种方法可能查出来的结果集过大。

请问哪位大侠有比较好的解决办法? 提示:该表数据量比较大上千万级。
...全文
622 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2014-10-30
  • 打赏
  • 举报
回复
我建议是先查出已经有的所有的id,然后对要导入的数据进行筛选之后,再添加.
tony4geek 2014-10-28
  • 打赏
  • 举报
回复
merge into sql server 2005 不支持该语法,2008 开始支持
chen2713756 2014-10-28
  • 打赏
  • 举报
回复
merge方法是你最好的选择,具体语法: merge into table t using (select id,name from table_tmp) t1 on t.id=t1.id when matched then update set t.id=t1.id, t.name=t1.name when not matched then insert (t.id, t.name) values (t1.id, t1.name)
skyWalker_ONLY 2014-10-16
  • 打赏
  • 举报
回复
如果是oracle数据库的话,试试merge语法
  • 打赏
  • 举报
回复
引用 4 楼 sky_walker85 的回复:
具体如何merge可以参考这篇博客http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
+1 感觉这个方法挺好的
whos2002110 2014-10-16
  • 打赏
  • 举报
回复
数据库字段上加唯一索引了么? 如果加了省事点就让数据库自己判断了, 批量保存时如果有值冲突我就不知道会如何了 如果都回滚了还是要判断唉, 不懂
skyWalker_ONLY 2014-10-16
  • 打赏
  • 举报
回复
skyWalker_ONLY 2014-10-16
  • 打赏
  • 举报
回复
引用 2 楼 boyone2009 的回复:
[quote=引用 1 楼 sky_walker85 的回复:] 如果是oracle数据库的话,试试merge语法
具体能说一下怎么样吗?[/quote] 可以将导入的记录存入一个新表中,然后对新表和原表执行merge into语句,具体语法楼主百度一下吧
无伤 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 sky_walker85 的回复:
如果是oracle数据库的话,试试merge语法
具体能说一下怎么样吗?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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