![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление повторяющихся полей с помощью 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. совет.!