表结构一致,一个表往另一个表插入不存在的数据,插入出错:

handsome1234 2015-07-22 08:20:07
INSERT
INTO BARCODES BB
SELECT *
FROM YHJ_BARCODES AA
WHERE (
AA.BAR_CODE NOT IN
(SELECT KK.BAR_CODE
FROM BARCODES KK
)
)
BAR_CODE 是主键,上述语句插入说是主键冲突。

如果说冲突,那我下面语句应该返回冲突的列表,实际上下面的语句返回0行
SELECT AA.* FROM BARCODES BB ,YHJ_BARCODES AA WHERE TRIM(AA.BAR_CODE)=TRIM(BB.BAR_CODE)

那就奇怪了,又冲突,又返回0行,奇怪了。
...全文
181 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
handsome1234 2015-07-23
  • 打赏
  • 举报
回复
两位说得没错: delete from YHJ_BARCODES a where rowid !=(select max(rowid) from YHJ_BARCODES b where a.BAR_CODE=b.BAR_CODE) 删除了330行 搞定。
Tiger_Zhao 2015-07-23
  • 打赏
  • 举报
回复
将要插入的数据中 BAR_CODE 重复吧。下面两个COUNT是否一致?
SELECT COUNT(*), COUNT(DISTINCT BAR_CODE)
  FROM YHJ_BARCODES AA 
 WHERE (
           AA.BAR_CODE NOT IN 
           (SELECT KK.BAR_CODE 
             FROM BARCODES KK
           )
       )
碧水幽幽泉 2015-07-22
  • 打赏
  • 举报
回复
重点关注:TRIM(AA.BAR_CODE)=TRIM(BB.BAR_CODE) 返回0行是因为BARCODES 没有插入成功。 冲突是因为BB.BAR_CODE有重复的值,建议去重后再插入。
handsome1234 2015-07-22
  • 打赏
  • 举报
回复
SELECT AA.* FROM YHJ_BARCODES AA left JOIN BARCODES BB ON TRIM(AA.BAR_CODE)=TRIM(BB.BAR_CODE) 返回16592行 SELECT AA.* FROM YHJ_BARCODES AA 返回16592 行 SELECT COUNT(AA.BAR_CODE) FROM BARCODES BB left JOIN YHJ_BARCODES AA ON TRIM(AA.BAR_CODE)=TRIM(BB.BAR_CODE) 返回 0 行

3,493

社区成员

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

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