Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

При удалении дублир-щих записей удал-ся ВСЕ. А как оставить одну?   Найти похожие ветки 

 
Геннадий   (2002-11-12 21:42) [0]

В SQL запросе можно добавить какое-то слово (не помню какое) и тогда все дублирующиеся записи исчезнут. А как выполнить (а точнее, составить) запрос, в котором вместо нескольких повторяющихся записей будет лишь одна? То есть из таблицы:

Иванов
Иванов
Петров
Иванов

Нужно получить:

Иванов
Петров


Подскажите, пожалуйста.


 
Anatoly Podgoretsky   (2002-11-12 21:51) [1]

Не использовать SQL


 
MsGuns   (2002-11-12 21:53) [2]

SELECT DISTINCT ...


 
Геннадий   (2002-11-12 22:26) [3]

MsGuns © (12.11.02 21:53)
SELECT DISTINCT ...



Вот именно так дубли и удаляются, а мне нужно один оставить...


 
EDDI   (2002-11-12 23:40) [4]

Удалено модератором


 
kaif   (2002-11-13 03:51) [5]

Это невозможно.
Поэтому те, кто использует SQL должен приложить все усилия к тому, чтобы дубликатов не было с самого начала.
Или же приходится писать процедуры обхода, но это уже не совсем SQL идеология. И даже в этом случае нужно иметь хоть какой-то уникальный ключ (ID), то есть не должно быть совершенно одинаковых записей. В Paradox, правда (так как это не SQL-база) возможно даже в этом случае удалить дубликаты, но разумеется, только путем обхода.
Есть еще вариант создать другую таблицу, сделать SELECT DISTINCT и результат в нее просто переписать, а прежнюю таблицу уничтожить. Я бы так сделал, так как это быстрее всего.


 
Andriano   (2002-11-13 08:25) [6]

Чего-то вы того...
SELECT DISTINCT возвращает не повторяющиеся значения, т.е. всех по одному. Поэтому это и было нужно.
Но как с помощью SELECT DISTINCT удалить все повторяющиеся - никак.


 
ЮЮ   (2002-11-13 08:26) [7]

Таблица состоит из одного полл? Она никак не связана с другими? Как можно дать совет, ничего не зная о структуре таблицах и связях?


 
MsGuns   (2002-11-13 10:45) [8]

Насколько я понял, Геннадий выносит на форум многие ТЕКУЩИЕ вопросы, даже не затрудняя себя НОРМАЛЬНЫМ объяснением ситуации (не говорю уж о попытках самостоятельно в них разобраться). Чего стОит хотя бы ветка о том как запихнуть прогу вместе с движком на 1 (ОДНУ !) дискету только потому что так требует его шеф. Честно говоря, у меня пестрит в глазах от обилия его тем в форуме.


 
LordOfSilence   (2002-11-13 11:12) [9]

DELETE FROM MyTable WHERE MyField IN (SELECT MyField FROM MyTable GROUP BY MyField HAVING Count(*)>1) - это вроде как по одному полю.



 
MsGuns   (2002-11-13 11:30) [10]

>LordOfSilence © (13.11.02 11:12)

Не знаю как у Вас, но у меня возникло ощущение, что мы все прописываем таблетки пациенту, которому нужен нож хирурга.


 
sniknik   (2002-11-13 11:35) [11]

MsGuns можно пожать вашу мужественную руку?

LordOfSilence для какого SQL-ля запрос? в Access и Локал ошибка синтаксиса в MSSQL удаляет ВСЕ.

Геннадий конкретика в вопросах необходима как воздух. иначе нихрена не понятно на чтоже отвечать?


 
Max Zyuzin   (2002-11-13 12:01) [12]

>LordOfSilence © (13.11.02 11:12)
В результате вашего запроса будут удалены те записи, которые повторяются, но все... ни одной не останется...

А вообще согласен, что нужно поконкретнее, а то не понятно.. нифига ;)


 
LordOfSilence   (2002-11-13 12:12) [13]

Извиняюсь, если где напортачил, времени
нет всерьез разбираться.
Хорошо, может так получится?

delete from MyTable t1 where 1<(select count(t2.MyField) from MyTable t2 where t1.MyField=t2.MyField)

P.S. Лучше б не влезал, раз стопроцентно не знаю :)...


 
LordOfSilence   (2002-11-13 12:17) [14]

To Sniknik.

В Access я бы сам не так делал. Мы, кстати, с Вами
как-то уже обсуждали эту тему в подобной ветке.
Помнится, я предлагал использовать встроенные
Access-функции Last() & First(), Вы - что-то другое.
Мой вариант точно работал, сам проверял.

В любом случае автор той ветки остался нам благодарен:)


 
sniknik   (2002-11-13 12:19) [15]

LordOfSilence © (13.11.02 12:12)
для локал SQL должен пройти (подобное видел и очень удивлялся, но работало проверял) правда там count(*) было, но неважно.
а для других все одно удалит все с повторами.
т.е. все равно необходимы уточнения от автора вопроса а он как назло только обшие задает.


 
kaif   (2002-11-13 19:18) [16]

2 LordOfSilence
В ваших подзапросах действительно выберутся все записи, которые имеют дубликаты, но все такие записи удалятся включая и дубликаты и сами записи.
Автору вопроса настоятельно рекомендую прежде, чем все это пробовать сделать резервное копирование таблицы.
Не то следующим его вопросом будет: "Господа, как восстановить только что удаленные записи в таблице Paradox? Должен же быть какой-то метод (Uerase или что-то в этом духе...)"


 
sniknik   (2002-11-13 19:24) [17]

2kaif © (13.11.02 19:18)
второй запрос рабочий от
LordOfSilence © (13.11.02 12:12)
но только для Local SQL см.
sniknik © (13.11.02 12:19)

проверьте! я например был очень удивлен.
также ктото говорил для IB подобное срабатывает, но я не проверял. (к слову о конкретизации вопросов :-) сильные различия да?)


 
Val   (2002-11-13 19:39) [18]

>Геннадий © (12.11.02 21:42)
А как выполнить (а точнее, составить) запрос, в котором вместо нескольких повторяющихся записей будет лишь одна?
именно для этого и создан distinct
Вот именно так дубли и удаляются, а мне нужно один оставить...

не порите чушь. покажите лучше текст запроса.


 
Val   (2002-11-13 19:40) [19]

коллеги, автор не просит удалять записи, он хочет получить выборку, если исходить из его вопроса, вы пошли не в те двери.


 
Андрей Прокофьев   (2002-11-13 20:02) [20]

Работает ли такое на LocalSQL
DELETE FROM Table
WHERE (ID NOT IN
(SELECT MAX(ID) AS MaxID FROM Table
GROUP BY Name))
При наличии ключевого поля ID
На MSSQL работает


 
Геннадий   (2002-11-13 20:49) [21]

В ответ на:

MsGuns © (13.11.02 10:45)
Насколько я понял, Геннадий выносит на форум многие ТЕКУЩИЕ вопросы, даже не затрудняя себя НОРМАЛЬНЫМ объяснением ситуации (не говорю уж о попытках самостоятельно в них разобраться). Чего стОит хотя бы ветка о том как запихнуть прогу вместе с движком на 1 (ОДНУ !) дискету только потому что так требует его шеф. Честно говоря, у меня пестрит в глазах от обилия его тем в форуме.


Ай-яй-яй, бедненький... в глазках у него запестрило! Текущие вопросы выносят все, кто с ними сталкивается и нуждается в быстром ответе-подсказке. Не хочешь - не отвечай и даже не читай мои посты. Чего тогда ты делаешь на форуме? Что касается вопроса с дискеткой, то я не говорил "с движком" - я спрашивал компонент/технологию для уменьшения объёма программы и уменьшения требований к компьютеру пользователя.

Нет нормального объяснения ситуации? Что тут объяснять-то ещё? Я же сказал - есть таблица (само по себе - при чём здесь связи?). Приведён пример того, что есть. И того, что нужно получить.


В ответ на:

Val © (13.11.02 19:40)
коллеги, автор не просит удалять записи, он хочет получить выборку, если исходить из его вопроса, вы пошли не в те двери.


Да, именно так. Чего все принялись удалять?


В ответ на:


ЮЮ © (13.11.02 08:26)
Таблица состоит из одного полл? Она никак не связана с другими? Как можно дать совет, ничего не зная о структуре таблицах и связях?


Зачем всё так усложнчть? Ведь дан пример того, что есть. И что нужно получить.


 
Val   (2002-11-13 20:55) [22]

Зачем всё так усложнчть? Ведь дан пример того, что есть. И что нужно получить.

и несколько раз дан ответ:
select distinct my_field from my_table


 
Jen N   (2002-11-13 21:07) [23]

Ай-яй-яй, бедненький... в глазках у него запестрило!

Геннадий, вам нужен не select и не distinct, а немножко терпения и уважения ко всем нам.


 
Anatoly Podgoretsky   (2002-11-13 21:23) [24]

Геннадий © (13.11.02 20:49)
Взяли это их твоего вопроса "При удалении дублир-щих записей удал-ся ВСЕ. А как оставить одну?" так что нечего на зеркало пенять.
По уму для Парадокса в данной ситуации правильнее использовать навигационные методы, т.е. Table.Delete, а SQL использовать для получения списка записей у которых количество экземляров свыше одного.


 
sniknik   (2002-11-13 21:43) [25]

Вопрос был так задан, что непонятно, абстрактный был вопрос надо сказать, без кода и пояснений. а ответ правильный MsGuns © (12.11.02 21:53) проигнорирован без толкового обьяснения почему.
кстати distinct он тоже по разному действует для одного поля или множества, разные будут результаты. но ладно не буду об этом автор похоже считает себя очень умным и знающим, а нас вроде службы поддержки которая обязана дать быстрый ответ.

ответ на
Геннадий © (13.11.02 20:49)
...
> Не хочешь - не отвечай и даже не читай мои посты.
...

чтож, для меня это руководство к действию. ;#(


 
Геннадий   (2002-11-13 22:27) [26]

Я уважаю присутствующих. Но чего Вы на меня накинулись? Я просто задал вопрос - а в ответ одна критика. Если кто-то не хочет отвечать - его право, зачем сразу говорить, что я самый умный и никого не уважаю?
Я попросил совета. Некоторые товарищи несколько резко ответили. Я в такой же форме ответил им.

Давайте не будем продолжать это недопонимание друг друга и закроем эту ветку, а то боюсь дойдёт до посылания друг друга.

С наилучшими пожеланиями, Геннадий



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

Форум: "Базы";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.008 c
1-4291
Кокандокало
2002-11-20 20:48
2002.12.02
поиск array[1..n] of byte в array[1..m] of byte


1-4387
bwadmin
2002-11-22 10:34
2002.12.02
Созадние help файла


6-4527
Лана Розанова
2002-10-04 10:57
2002.12.02
HELP......me


1-4465
AVD
2002-11-19 17:31
2002.12.02
Размеры десктопа ?


3-4224
kserg@ukr.net
2002-11-13 16:51
2002.12.02
Как подключиться к





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский