Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 абсолютно одинаковые записи, как удалить только одну из них? 
V
    Опции темы
sgentstuff
Дата 28.6.2006, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



2 абсолютно одинаковые записи
как удалить только одну из них? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
bas
Дата 28.6.2006, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Добавить автоинкриментное поле и удалить max(min). 
PM MAIL   Вверх
sgentstuff
Дата 28.6.2006, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



например, таблица с полем name записи идут так:
masha
masha
pasha
pasha
dasha
dasha

сответственно продублированные надо удалить 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Mad
Дата 28.6.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: нет
Всего: 19



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

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


--------------------
user posted image
PM MAIL   Вверх
sgentstuff
Дата 28.6.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



вот такая таблица

id   name

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

как должен выглядить запос? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
sgentstuff
Дата 28.6.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



в mysql есть limit
какой аналог лимита в mssql 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Mad
Дата 28.6.2006, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: нет
Всего: 19



Цитата(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 


--------------------
user posted image
PM MAIL   Вверх
bas
Дата 28.6.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Код

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


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

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

Это сообщение отредактировал(а) bas - 28.6.2006, 09:41
PM MAIL   Вверх
boevik
Дата 28.6.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Что б не заморачиваться с identity и удалить только 1 запись
Код

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


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
bas
Дата 28.6.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Код

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)
 
PM MAIL   Вверх
sgentstuff
Дата 28.6.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



спасибо, все работает, бас а что у тебя за редактор?
 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
sgentstuff
Дата 29.6.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: нет
Всего: 1



для mysql я использовал MySQL Front
какой аналог для mssql? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
ТоляМБА
Дата 29.6.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



В MS-SQL Server селекты удобно строить во View, ну а select в delete недолго переделать (только не всякий можно конечно smile ) 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.