导入表id不重复

觉v醒 2011-11-14 06:39:04
2张表 a(fid,fName),b(fAID,fAname)

insert into b(fAID,fAname,)
select fid ,fName from a where fID not in(select fAID from b)


把a表的数据插入b表 而且 不重复插入(a表中存在如 2个id=1的情况)

现在发现如下情况
情况一:
假设b表中 不存在fAID=1的记录 a表中存在fid=1 2条记录 执行上面sql 会向b表插入2条记录 而不是一条 为什么?

情况二:

假设b表中 存在fAID=1的记录 a表中存在fid=1 2条记录 执行上面sql 会向b表插入0条记录

请问我想实现 不重复插入数据 该怎么写?
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-14
  • 打赏
  • 举报
回复
楼主看一下in或not in的用法例子
http://technet.microsoft.com/zh-cn/library/ms177682(SQL.90).aspx
pengxuan 2011-11-14
  • 打赏
  • 举报
回复
情况一
你单独把select fid ,fName from a where fID not in(select fAID from b) 这句执行看一下就知道了

情况二
你写的SQL是正确的,不会出现你说的插入0条记录,还是你单独把select fid ,fName from a where fID not in(select fAID from b) 这句SQL执行看一下结果就知道了
xqx_8888 2011-11-14
  • 打赏
  • 举报
回复
insert b
select * from a where not exists(select 1 from b faid=a.id)
不需要重复插入
快溜 2011-11-14
  • 打赏
  • 举报
回复
insert into b
select * from a where not exists(select 1 from b where faid=a.id)
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
现在发现如下情况
情况一:
假设b表中 不存在fAID=1的记录 a表中存在fid=1 2条记录 执行上面sql 会向b表插入2条记录 而不是一条 为什么?

这个应该不会吧 再测试下
情况二:

假设b表中 存在fAID=1的记录 a表中存在fid=1 2条记录 执行上面sql 会向b表插入0条记录

请问我想实现 不重复插入数据 该怎么写?

insert into b select * from a where not exists(select 1 from b where faid=a.id)
  • 打赏
  • 举报
回复
试试not exist的对应的mssql

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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