2016-11-15 6 views
-5
SELECT 
    * 
FROM 
    Registrations AS R1 
    INNER JOIN Registrations AS R2 
     ON R2.UserItemId = R1.UserItemId 
     AND R2.CourseOfferingId = R1.CourseOfferingId 
     AND R2.Id != R1.Id 
WHERE 
    R2.Id > R1.Id 

Как удалить повторяющиеся значения?УДАЛИТЬ ДВОЙНЫЕ значения в SQL

Благодаря

+0

Этот вопрос является неполным, но я предлагаю вам следующее: 'удалить из регистраций, где существует (выберите 1 из регистраций r2, где r2.UserItemId = Регистрации.UserItemId и r2.CourseOfferingId = Регистрации. CourseOfferingId и r2.Id <Регистрации. UserItemId' – shawnt00

+0

, что здесь делает выбор 1 – user18160

+0

Вы можете использовать 'select *' или любое другое выражение. Точка заключается в том, возвращает ли подзапрос результат - результат на самом деле не имеет значения. Если вы просто запустите 'select 1 'вы получаете одну строку и столбец со значением' 1'. – shawnt00

ответ

0

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

delete from Registrations 
where exists (
    select 1 
    from Registrations r2 
    where r2.UserItemId = Registrations.UserItemId 
     and r2.CourseOfferingId = Registrations.CourseOfferingId 
     and r2.Id < Registrations.Id 
); 

Видимо у вас есть несколько строк, которые имеют одни и те же UserItemId и CourseOffereningId но разные Id значения. Я предполагаю, что вы хотите сохранить один с самым низким Id и отказаться от остальных.

Подзапрос в запросе принимает каждую строку в таблице и проверяет, есть ли другая строка, подобная ей, но с более низким идентификатором. Если ответ, если да, то строка удаляется.

0

Вы можете попробовать запрос, как этот

;with cte as (
select *, RowN = row_number() over(partition by useritemid, courseofferingid, id order by id) from Registrations) 
delete from cte where Rown > 1 
+0

Скорее всего, это поможет OP, если вы включили ссылки на CTE ... ради них ... –

Смежные вопросы