Исключение дубликатов строк
SELECT DISTINCT BAccID
FROM BAccountsAnalysis;
2)
SELECT BAccID
FROM BAccountsAnalysis
GROUP BY BAccID;
Всё это выдаёт только один столбец. Мне нужны все, например:
"SELECT *
FROM BAccountsAnalysis
GROUP BY BAccID;"
- но это неверно.
Помогите!
Довольно странный вопрос. Ты делаешь выборку в один столбец, он тебе и показывает один столбец. Перечислишь все, он тебе покажет все. Только * с дистинктом не работает, перечисляй через запятую. А груп бай и подавно не понимает, как это сделать выборку всего а потом сгруппировать по одному полю, что тогда делать с остальными? тут либо аггрегирующая функция должна использоваться, либо в конструкции груп бай перечисляешь все поля которые перечислил в селекте. Но вообще для этого используется дистинкт.
Почему же не работает? Очень даже работает... Другое дело что автор вопроса сам не понимает что он хочет получить... Даже БД не указал.
Да, работает,я не совсем то имел ввиду =) Дело в том что зачем в бд хранить дублирующиеся строки, информативности нуль - объем растет. если у строк есть уникальный индекс, то смысл "селест дистинкт *" - сводился бы к простому селекту, но производительность запроса падает, поэтому не рекомендуется использовать "селест дистинкт *". Ну это мое мнение, я стараюсь избегать подобных конструкций. А задача как правило ставится найти строки с одинаковой инфой, но разными идшниками. в любом случае, рекомендую перечислять поля через запятую и дистинктом пользоваться аккуратно.
"SELECT DISTINCT * FROM BAccountsAnalysis"
И без всяких группировок, которые здесь не в тему.
Может в какой-нить базе эта конструкция и будет неверной (как предполагают\утверждают вышедискутирующие), но в сиквеле отработает только в путь - это точно.
Спасибо, что подтолкнули к пониманию.
А как быть с другими колонками? Случайный выбор? Если случайный выбор, то можно почитать про access'овскую функцию Last(). Может быть спасет, но я не силен в этом. В mssql так сделать нельзя.
С БД работа идёт через С++ и соответствующий интерфейс, не знаю как в этом случае удастся воспользоваться Access-овскими функциями, но посмотрю.
Примерно это я имел ввиду когда говорил что задача как правило выбрать неодинаковые записи только по каким-то определенным столбцам, а если для решения задачи делается "select distinct *" и задача успешно решается, то, имхо, впору задуматься о целостности данных в базе.
2Комаджу: если случайный выбор и всеравно, то можно любую аггрегирующую функцию заюзать, типа мин. и все прокатит и в мс скуэль. =) Но правда таких извращений рекомендую избегать, лучше подумать а действительно ли нужно в выборке это поле, в котором будет "случайно значение". =)
С БД работа идёт через С++ и соответствующий интерфейс, не знаю как в этом случае удастся воспользоваться Access-овскими функциями, но посмотрю.[/QUOTE]
А если попробовать - Microsoft Jet OLEDB Provider. Копать по этому сочетанию - возможно есть способы средствами этого провайдера использовать возможности access.
Моя телепатия подсказывает что автору вопроса нужен GROUP BY только вот толком объяснить он не может.
Какой вариант удаления дублирующих строк наиболее оптимален?
Спасибо!
мне кажется наиболее удобно через временную таблицу, селект-дистинктом выбираешь все поля, вставляешь это во временную таблицу, потом чистишь свою, из временной вставляешь обратно и удаляешь временную...имхо так...