Помогите SQL запросом свернуть дубли #742879


#0 by Помогите
Нужно найти все строки с дублирующимся полем, и в новое поле для всех этих строк присвоить значение идентификатора одной из строк. Например таблица: id   поле1 0    Красный 1    Картошка 2    Карандаш 3    Красный 4    Два 5    Два 6    Два должна превратиться в такую таблицу: id   поле1      НовоеПоле 0    Красный    0 1    Картошка 2    Карандаш 3    Красный    0 4    Два        4 5    Два        4 6    Два        4 В строку 0 и в строку 3 добавилось значение 0 в НовоеПоле, потому что 0 - это идентификатор одной из строк с дублирующимся значением "Красный" В строку 4, 5 и в строку 6 добавилось значение 4 в НовоеПоле, потому что 4 - это идентификатор одной из строк с дублирующимся значением "Два" В другие строки ничего не добавилось, т.к. там нет дублей. А теперь самое главное, вопрос: Как сделать такой запрос?
#1 by Помогите
ЗЫ: MySQL
#2 by фобка
Первый запрос - простой select t.id, sum group by t.id having sum >1. Затем егоже иннер джойн между собой по id (так же как делают счетчик записей). Итоговый запрос left join с первой таблицей
#3 by фобка
Если есть счетчик записей то юзать его
#4 by Помогите
Ничего не понял. >> Первый запрос - простой select t.id, sum group by t.id having sum >1. выдаст пустой результат, потому что id уникальный, sum=1 всегда. >> егоже иннер джойн между собой по id Что это даст кроме удваивания столбцов?
#5 by фобка
#6 by Помогите
Наверное ты не правильно понял мою задачу.
#7 by фобка
нет, я все понял верно
#8 by фобка
первый запрос, назовем его вложенный1 выдаст Красный Два
#9 by фобка
Чтобы пронумеровать его нужно его заджойнить с самим собой по т1.ид<=т2.ид. Но если есть метод типа rownumber логичнее использовать его.
#10 by фобка
Третьим действием ты исходную таблицу соединяешь с тем что получилось в чтобы выцепить счетчик строк
#11 by Помогите
Мне не надо ничего нумеровать
#12 by Помогите
Но в общем я твою мысль понимаю
#13 by dk
select   Id   , Поле1   , Влож.ID from исходные left join (select   min(ID)   Поле1 from исходные group by Поле1) влож
#14 by dk
select   Id   , Поле1   , Влож.ID from исходные left join (select   min(ID)   Поле1 from исходные group by Поле1) влож ON Поле1 = Влож.Поле1
#15 by mehfk
Напиши аналогичный запрос на языке запросов 1С, переведи промтом.
#16 by фобка
тогда все проще Select t.name, t2.id from t as t left join (Select t.name, t.id group by t.name, t.id having sum1) >1) as t2 on t.name = t2.name
#17 by фобка
Having sum>1
#18 by Помогите
Ага, спасибо. Самое то.
Тэги: Веб-мастеринг
Ответить:
Комментарии доступны только авторизированным пользователям