Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.14;
Скачать: CL | DM;

Вниз

Удаление повторяющихся полей с помощью SQL HELPPP!!!!!!   Найти похожие ветки 

 
Soft ©   (2002-09-20 17:35) [0]

Привет всем.

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

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

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


 
sniknik ©   (2002-09-20 20:05) [1]

просто не получится, обязательно нужно ключевое поле (не 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. совет.!


 
VAleksey ©   (2002-09-21 08:58) [2]

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


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

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


 
susera   (2002-09-21 21:27) [4]

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

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-22 00:16) [5]

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

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


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

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


 
Polevi ©   (2002-09-22 17:35) [7]

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


 
Soft ©   (2002-09-22 19:22) [8]

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


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

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


 
Johnmen ©   (2002-09-23 09:59) [10]

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


 
Alexandr ©   (2002-09-23 10:08) [11]

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


 
Polevi ©   (2002-09-23 10:49) [12]

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


 
CbIH ©   (2002-09-23 16:54) [13]

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


 
CbIH ©   (2002-09-23 16:55) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2002.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-45198
s.ts
2002-09-20 21:23
2002.10.14
Оповещение об изменении таблицы


4-45660
arcoant
2002-08-29 15:05
2002.10.14
И снова чужие окна


1-45463
Злыдень
2002-10-01 22:06
2002.10.14
Вот так написал...


14-45505
Карелин Артем
2002-09-18 12:45
2002.10.14
Удобно ли работать с GPRS?


4-45639
Palladin
2002-08-31 19:23
2002.10.14
Как узнать description exe-фала...