2015-11-03 5 views
2

Я работаю в системе, где я должен обновить поле dupstat для повторяющихся записей на основе 4-х колонок, т.е. CNAME, Fname, mname, DOB. Также мне нужно проверить, соответствует ли правомочность столбец содержит значение «Нет». Я следующий запрос для поиска дубликатов записей:SQL - запись Обновление с помощью внутреннего соединения

select o.cname, o.fname, o.CRollNo, o.Coll_Code, o.mname, o.dob, oc.dupeCount, o.Eligible, o.dupstat 
from REGN_Temp o 
inner join (
    SELECT cname, COUNT(*) AS dupeCount, FName, mname, dob 
    FROM REGN_Temp 
    GROUP BY cname, FName, mname,dob 
    HAVING COUNT(*) > 1 
) oc on o.cname = oc.cname and o.fname = oc.FName and o.mname = oc.mname and o.dob=oc.dob and o.Eligible='No' order by cname, fname 

Теперь я хочу, чтобы обновить столбец «dupstat = Y» для всех записей, которые являются дубликатом и имеющие Приемлемость = «NO»

ответ

4

Вы можете UPDATE с JOIN напрямую, просто использовать UPDATE вместо SELECT с последующим SET, как это:

UPDATE o 
SET o.dupstat='Y' 
from REGN_Temp o 
inner join 
(
    SELECT cname, COUNT(*) AS dupeCount, FName, mname, dob 
    FROM REGN_Temp 
    GROUP BY cname, FName, mname,dob 
    HAVING COUNT(*) > 1 
) oc on o.cname = oc.cname 
    and o.fname = oc.FName 
    and o.mname = oc.mname 
    and o.dob=oc.dob 
    and o.Eligible='No'