Вставить уникальные записи, обновить дубликаты - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть две таблицы, 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 обнаружил дублирующиеся идентификатор и имя, он должен обновить TABLEDest с использованием последней версии.записи, найденные в TABLESource с тем же первичным ключом (id_name)

id  code    name
2   09  gh
3   10  rr

Я понятия не имею, как это сделать.Пожалуйста, помогите мне.Спасибо:)

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

Поскольку у вас нет возможности упорядочить строки, я выбираю min (имя) в качестве значения для столбца имени.

insert into TABLEDest
select id, code, min(name)
from TABLESource
group by id, code
0 голосов
/ 23 сентября 2011

Я бы предложил перебирать вашу исходную таблицу и для каждой строки в источнике:

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)

    }
}

Это псевдокод, поэтому прямое копирование и вставка не будут работать, но этого должно быть достаточно, чтобы вы использовали ваш любимый вариант языка, чтобы это произошло.

...