Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
ВнизУдаление повторяющихся полей с помощью 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c