插入唯一记录,更新重复

时间:2011-09-23 04:29:41

标签: sql sql-server sql-server-2000 duplicates

我有两个表,TABLESource是我在哪里可以将记录插入到TABLEDest中,

现在TABLESource可以包含重复的字段:

id  code    name
2   09  abc
3   10  uu
2   09  def
3   10  rr
2   09  gh

我必须首先在TABLEDest中插入所有唯一记录,id +代码是主键(唯一)

id  code    name
2   09  abc
3   10  uu

现在,最后,如果TABLESource发现重复的id和名称,它必须用TABLESource中找到的具有相同主键(id_name)的最新记录更新TABLEDest

id  code    name
2   09  gh
3   10  rr

我不知道该怎么做。请帮我。谢谢:)

2 个答案:

答案 0 :(得分:0)

我建议迭代你的源表和源代码中的每一行:

Psudo Code:
//Get all source rows
query = 'SELECT * FROM TABLEsource'
rows = database.get(query)

//Iterate through all source rows
for each rows as row{
    //Search dest table for a match    
    checkQuery = 'SELECT * FROM TABLEDest WHERE id = '+row.id
    check = database.get(checkQuery)

    //If we do get a match
    if(check.rows > 0){

       //Update the relevant row
       query = 'UPDATE TABLEDest SET name = '+row.name+' WHERE id = '+check.id
       database.query(query)

    }else{

       //Otherwise, append a new row to the dest table
       query = 'INSERT INTO TABLEDest(id, code, name) '
              +'VALUES('+row.id+'. '+row.code+', '+row.name+')'
       database.query(query)

    }
}

这是psudo代码,因此直接复制和粘贴不起作用,但它应该足以让您使用自己喜欢的语言来实现它。

答案 1 :(得分:0)

由于您无法订购行,我选择将min(name)作为name列的值。

insert into TABLEDest
select id, code, min(name)
from TABLESource
group by id, code