Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление повторяющихся полей с помощью SQL HELPPP!!!!!! [D6, Access 97]


Soft ©   (2002-09-20 17:35:00) 

Привет всем.

Помогите составить SQL запрос, которрый будет удалять все записи из таблицы business где в поле firm записи повторяются.

Срочно, очень нужно.

Безглючного кода и прочего всем


CbIH   (2002-09-23 16:55:00) [1]

Сорри...
SELECT b2.id, конечно...


CbIH   (2002-09-23 16:54:00) [2]

Если есть ИД, можно так:
DELETE FROM FROM business WHERE id IN(
SELECT id FROM business b1, business b2
WHERE b1.firm=b2.firm
AND b1.id<b2.id)


Polevi   (2002-09-23 10:49:00) [3]

2Alexandr © (23.09.02 10:08)
а что там еще есть ?


Alexandr   (2002-09-23 10:08:00) [4]

в access е есть в мастере запросов сразу готовый запрос на удаление одинаковых записей.
так что ваш спор яйца выеденного не стоит


Johnmen   (2002-09-23 09:59:00) [5]

Невозможно удалить одну единственную запись, если имеется еще хотя бы одна, полностью с ней совпадающая !!!
(см. посты sniknik)


Виталий Панасенко   (2002-09-23 09:03:00) [6]

Можно и так:
delete from Business b1 where 1<(select count(b2.firm) from Business b2 where b1.Firm=b2.Firm)


Soft   (2002-09-22 19:22:00) [7]

Спасибо всем за ответы.


Polevi   (2002-09-22 17:35:00) [8]

DELETE FROM Business WHERE Firm IN (SELECT Firm FROM Business GROUP BY Firm HAVING Count(*)>1)


susera   (2002-09-22 14:24:00) [9]

Не знаю как этот запрос сработает в Access, но в Interbase он работает правильно.


sniknik   (2002-09-22 00:16:00) [10]

а вот так не делай! чтобы не было потом ....
в Access-е это удалит все записи где есть повторения т.к. не по ключевому полю удаляется.
упростим запрос, например повторяются значения с 1 и 2.
delete from business b1 where b1.firm in (1,2)
все остальное нужно чтобы получить эти поля правильно? значит из таблици удалятся записи с firm=1 и firm=2 так? а надо чтобы одна осталась.

запрос будет рабочим если опять таки ключ вставить и по нему удалять.


susera   (2002-09-21 21:27:00) [11]

Один из вариантов:

delete from business b1
where b1.firm in (
select b2.firm from business b2 where 1<(
select count(b3.firm) from business b3 where b3.firm=b2.firm)
group by firm)


sniknik   (2002-09-21 12:38:00) [12]

так получится ели совпадения считать по всем полям. здесь Soft конкретно указал по одному полю firm, значит остальные могут чемто отличатся.


VAleksey   (2002-09-21 08:58:00) [13]

Можно сделать
SELECT DISTINCT * FROM ....
потом удалить все записи в старой таблице, и результат прошлого запроса снова записать в нее.


sniknik   (2002-09-20 20:05:00) [14]

просто не получится, обязательно нужно ключевое поле (не firm) например автоинкрементное, сдесь id, (если его добавить в Access оно само проставится у существующих записей)
запрос который копирует в новую таблицу записи с единственным значением firm
SELECT * INTO businessNew FROM business WHERE id IN (SELECT Min(id) FROM business GROUP BY firm)

на самом деле это лутший вариант чем удаление (чтобы не было потом мучительно больно :-))
но если нужно удаление замени select на delete, IN на Not In и пробуй, эксперементируй :-) но чтобы не было потом ....

и поменяй Access 97 на Access 2000 min. совет.!


Наверх

Титульная страница Поиск, карта сайта Написать письмо