Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > 2 абсолютно одинаковые записи


Автор: sgentstuff 28.6.2006, 07:23
2 абсолютно одинаковые записи
как удалить только одну из них? 

Автор: bas 28.6.2006, 07:40
Добавить автоинкриментное поле и удалить max(min). 

Автор: sgentstuff 28.6.2006, 07:52
например, таблица с полем name записи идут так:
masha
masha
pasha
pasha
dasha
dasha

сответственно продублированные надо удалить 

Автор: Mad 28.6.2006, 08:09
Цитата(sgentstuff @  28.6.2006,  06:23 Найти цитируемый пост)
2 абсолютно одинаковые записи

если в БД такое встречаеться, то значит база спроектированна неправильно
в каждой таблице должно присутствовать ключевое поле (в режких случаях комбинация полей) 

Автор: sgentstuff 28.6.2006, 08:28
вот такая таблица

id   name

1   masha
2   masha
3   pasha
4   pasha
5   dasha
6   dasha

как должен выглядить запос? 

Автор: sgentstuff 28.6.2006, 08:57
в mysql есть limit
какой аналог лимита в mssql 

Автор: Mad 28.6.2006, 09:33
Цитата(sgentstuff @  28.6.2006,  07:28 Найти цитируемый пост)
вот такая таблица

id   name

1   masha
2   masha
3   pasha
4   pasha
5   dasha
6   dasha

как должен выглядить запос?  


определяеш курсор (names - имя твоей таблицы)
select max(id), name from names group by name

далее для каждой строки курсора
береш данные : id -> @mid name -> @name
delete from names where id <> @mid and name = @name

в резултате получиш таблицу

id  name
2  masha
4  pasha
6 dasha


Цитата(sgentstuff @  28.6.2006,  07:57 Найти цитируемый пост)
в mysql есть limit
какой аналог лимита в mssql  

аналог linit : top 
вот только тут он никчему smile 

Автор: bas 28.6.2006, 09:40
Код

delete from names where id IN (select max(id) from names group by name)


Добавлено @ 09:43 
Но это запрос  правильно сработает если каждая запись имеет дубль.

Добавлено @ 09:44 
Надо проверку на count() >1 

Автор: boevik 28.6.2006, 09:44
Что б не заморачиваться с identity и удалить только 1 запись
Код

set rowcount 1
delete from t1 
where f1='val'
set rowcount 0
 

Автор: bas 28.6.2006, 09:46
Код

delete from names where id IN (select max(id) from names group by name HAVING count(1) >= 2
)


Добавлено @ 09:47 
Код

delete from names where id not in (select min(id) from names group by name)
 

Автор: sgentstuff 28.6.2006, 13:36
спасибо, все работает, бас а что у тебя за редактор?
 

Автор: sgentstuff 29.6.2006, 09:41
для mysql я использовал MySQL Front
какой аналог для mssql? 

Автор: ТоляМБА 29.6.2006, 10:21
В MS-SQL Server селекты удобно строить во View, ну а select в delete недолго переделать (только не всякий можно конечно smile ) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)