Главная страница
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.017 c
1-45276
badaxe
2002-10-04 11:27
2002.10.14
Сортировка списка в ListView


1-45293
zeratul_pr
2002-10-04 16:44
2002.10.14
Разложить FileName на path fname


14-45523
kat
2002-09-18 15:22
2002.10.14
Direct Oracle Access


4-45641
Ipjack
2002-09-01 03:55
2002.10.14
Определение статуса клавиши shift


1-45459
Ferrarium
2002-10-03 15:34
2002.10.14
Собственный компонент