Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исключение дубликатов строк

9.0K
27 июля 2006 года
only
28 / / 11.11.2005
1)
SELECT DISTINCT BAccID
FROM BAccountsAnalysis;

2)
SELECT BAccID
FROM BAccountsAnalysis
GROUP BY BAccID;

Всё это выдаёт только один столбец. Мне нужны все, например:
"SELECT *
FROM BAccountsAnalysis
GROUP BY BAccID;"
- но это неверно.
Помогите!
385
27 июля 2006 года
SomewherSomehow
477 / / 25.07.2004
Довольно странный вопрос. Ты делаешь выборку в один столбец, он тебе и показывает один столбец. Перечислишь все, он тебе покажет все. Только * с дистинктом не работает, перечисляй через запятую. А груп бай и подавно не понимает, как это сделать выборку всего а потом сгруппировать по одному полю, что тогда делать с остальными? тут либо аггрегирующая функция должна использоваться, либо в конструкции груп бай перечисляешь все поля которые перечислил в селекте. Но вообще для этого используется дистинкт.
13
27 июля 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=SomewherSomehow]Только * с дистинктом не работает...[/QUOTE]
Почему же не работает? Очень даже работает... Другое дело что автор вопроса сам не понимает что он хочет получить... Даже БД не указал.
385
27 июля 2006 года
SomewherSomehow
477 / / 25.07.2004
Да, работает,я не совсем то имел ввиду =) Дело в том что зачем в бд хранить дублирующиеся строки, информативности нуль - объем растет. если у строк есть уникальный индекс, то смысл "селест дистинкт *" - сводился бы к простому селекту, но производительность запроса падает, поэтому не рекомендуется использовать "селест дистинкт *". Ну это мое мнение, я стараюсь избегать подобных конструкций. А задача как правило ставится найти строки с одинаковой инфой, но разными идшниками. в любом случае, рекомендую перечислять поля через запятую и дистинктом пользоваться аккуратно.
308
27 июля 2006 года
Комаджу
850 / / 26.07.2006
В MSSQL без проблем отработает конструкция:

"SELECT DISTINCT * FROM BAccountsAnalysis"

И без всяких группировок, которые здесь не в тему.
Может в какой-нить базе эта конструкция и будет неверной (как предполагают\утверждают вышедискутирующие), но в сиквеле отработает только в путь - это точно.
9.0K
27 июля 2006 года
only
28 / / 11.11.2005
Допустил смысловую ошибку: имелось ввиду не дублирующиеся строки, а скажем так, дублирующиеся значения в определённом столбце и объединение строк по этим значениям, с учётом присутствия в результирующей выборке всех столбцов с возможностью разнящихся значений в остальных столбцах. В итоге это самоисключающееся условие невозможное к выполнению.
Спасибо, что подтолкнули к пониманию.
308
27 июля 2006 года
Комаджу
850 / / 26.07.2006
Т.е. нужно реализовать селект, где значения колонки BAccID будут уникальны?
А как быть с другими колонками? Случайный выбор? Если случайный выбор, то можно почитать про access'овскую функцию Last(). Может быть спасет, но я не силен в этом. В mssql так сделать нельзя.
9.0K
27 июля 2006 года
only
28 / / 11.11.2005
Совершенно верно!
С БД работа идёт через С++ и соответствующий интерфейс, не знаю как в этом случае удастся воспользоваться Access-овскими функциями, но посмотрю.
385
27 июля 2006 года
SomewherSomehow
477 / / 25.07.2004
[QUOTE=only]Допустил смысловую ошибку: имелось ввиду не дублирующиеся строки, а скажем так, дублирующиеся значения в определённом столбце и объединение строк по этим значениям, с учётом присутствия в результирующей выборке всех столбцов с возможностью разнящихся значений в остальных столбцах. [/QUOTE]
Примерно это я имел ввиду когда говорил что задача как правило выбрать неодинаковые записи только по каким-то определенным столбцам, а если для решения задачи делается "select distinct *" и задача успешно решается, то, имхо, впору задуматься о целостности данных в базе.
2Комаджу: если случайный выбор и всеравно, то можно любую аггрегирующую функцию заюзать, типа мин. и все прокатит и в мс скуэль. =) Но правда таких извращений рекомендую избегать, лучше подумать а действительно ли нужно в выборке это поле, в котором будет "случайно значение". =)
308
27 июля 2006 года
Комаджу
850 / / 26.07.2006
[QUOTE=only]Совершенно верно!
С БД работа идёт через С++ и соответствующий интерфейс, не знаю как в этом случае удастся воспользоваться Access-овскими функциями, но посмотрю.[/QUOTE]

А если попробовать - Microsoft Jet OLEDB Provider. Копать по этому сочетанию - возможно есть способы средствами этого провайдера использовать возможности access.
13
28 июля 2006 года
RussianSpy
3.0K / / 04.07.2006
Моя телепатия подсказывает что автору вопроса нужен GROUP BY только вот толком объяснить он не может.
20K
04 августа 2006 года
Summer
2 / / 04.08.2006
Мой первый вопрос. У меня примерно такая же проблема: в базе данных *mdb около 40.000 строк. Среди них есть такие, которые дублируются по два-три раза (так уж случилось). Дублирование абсолютное - полное совпадение записей в каждой из 8 колонок (соединялось несколько разных таблиц и ID был отключен).
Какой вариант удаления дублирующих строк наиболее оптимален?
Спасибо!
385
07 августа 2006 года
SomewherSomehow
477 / / 25.07.2004
мне кажется наиболее удобно через временную таблицу, селект-дистинктом выбираешь все поля, вставляешь это во временную таблицу, потом чистишь свою, из временной вставляешь обратно и удаляешь временную...имхо так...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог