从temptable插入到另一个表

时间:2015-08-07 09:06:17

标签: mysql sql plsql

我希望将临时表中的数据添加到另一个表中,但它给出了重复值错误。 我认为这是因为对于其他客户端可能具有相同的主键(statement_image_id是主键)或相同客户端的相同主键但具有不同的贷款号。

现在我该如何将这些数据添加到另一个表中。

我的临时表:

select top 0 * into #temptable from tab1 
INSERT INTO #temptable ([STATEMENT_IMAGE_ID]
     ,[client_no]
      ,[LOAN_NO]
      ,[statement_date] 
      ,[ACCRUED_LATE_CHARGES]
      ,[TOTAL_DUE])

      SELECT msp.[STATEMENT_IMAGE_ID] --as msp_ID
     ,[client_no]
      ,[LOAN_NO]
      ,[statement_date] 
      ,[ACCRUED_LATE_CHARGES]
      ,[TOTAL_DUE]

      FROM tab1 si, tab2 msp
  WHERE msp.[client_no] = si.[client_no] and  msp.[loan_no] = si.[loan_no] 
  and  msp.[statement_date] = si.[statement_date]
  and msp.[statement_image_id] <> si.[statement_image_id]

这就是我尝试过的。

首先是提供重复错误,我认为不允许其他错误。

第一

 insert into tab1  select * from #temptable

第二

insert into tab1   select * from #temptable
where tab1.[client_no] =#temptable.client_no
and  tab1.[loan_no]= #temptable.[loan_no]
and tab1.[statement_date] = #temptable.[STATEMENT_DATE]

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

duplicate\null列中不能包含primary key个值。

你能做的一件事是, 更新tab1STATEMENT_IMAGE_ID的相同tab1 and #temptable值。{/ 1}

将数据插入tab1,以获取STATEMENT_IMAGE_ID中不同的tab1 and #temptable值。

insert into tab1 (
  select tmp.* 
  from #temptable tmp
  join tab1 t on t.STATEMENT_IMAGE_ID != tmp.STATEMENT_IMAGE_ID
) as x

update tab1 t
  join #temptable tmp on t.STATEMENT_IMAGE_ID == tmp.STATEMENT_IMAGE_ID
set 
  t.client_no = tmp.client_no,
  t.LOAN_NO = tmp.LOAN_NO,
  t.statement_date = tmp.statement_date, 
  t.ACCRUED_LATE_CHARGES = tmp.ACCRUED_LATE_CHARGES,
  t.TOTAL_DUE = tmp.TOTAL_DUE;

注意: 如果其他任何列都有unique constraint,您也必须考虑这一点。

如果您无法丢失数据,请创建新的image_id

insert into tab1 (
  select tmp.* 
  from #temptable tmp
  join tab1 t on t.STATEMENT_IMAGE_ID != tmp.STATEMENT_IMAGE_ID
  union all
  select 
    UUID(),
    tmp.client_no,
    tmp.LOAN_NO,
    tmp.statement_date,
    tmp.ACCRUED_LATE_CHARGES,
    tmp.TOTAL_DUE
  from #temptable tmp
  join tab1 t on t.STATEMENT_IMAGE_ID == tmp.STATEMENT_IMAGE_ID
) as x

注意:如果UUID()是你的选择..其他some_new_id