powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / уникальность в select'e
14 сообщений из 14, страница 1 из 1
уникальность в select'e
    #33971264
rec15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sybase ase 12.5

простейший пример
есть таблица example с полем id- поле неуникальное
нужно сделать из таблицы селект, чтобы каждое значение id в выборке присутствовало только один раз, т.е. выборка была бы уникальной
какое из неуникальных значений попадёт в выборку неважно
группировка и введение уникальности для решения задачи не подходят

как должен выглядеть такой запрос?
...
Рейтинг: 0 / 0
уникальность в select'e
    #33971420
Maktub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. distinct
2. По набору даннчх пробежаться сортированным курсором и выкидывать дубликаты
...
Рейтинг: 0 / 0
уникальность в select'e
    #33971617
rec15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maktub1. distinct
2. По набору даннчх пробежаться сортированным курсором и выкидывать дубликаты

Хмм... дистинкт применяется ко всей записи, а можно ли его применить к конкретному полю записи?
Как не стараюсь у меня это не получается.
...
Рейтинг: 0 / 0
уникальность в select'e
    #33971889
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
having count(FIELD) = 1
...
Рейтинг: 0 / 0
уникальность в select'e
    #33972001
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соврал.

Если на таблице есть PK (pk)

select * from example ex where ex.pk =
(select min(pk) from example i where i.id = ex.id) group by ex.id, ex.pk
...
Рейтинг: 0 / 0
уникальность в select'e
    #33972393
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы создал таблицу с кластерным индексом на это поле и с параметром IGNORE_DUP_KEY и вставил бы туда все данные. Дублирующие записи удалятся при этом автоматом.
...
Рейтинг: 0 / 0
уникальность в select'e
    #33972666
rec15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы сделать выборку только с помощью SQL-запроса, не создавая никаких лишних таблиц.

он жеselect * from example ex where ex.pk =
(select min(pk) from example i where i.id = ex.id) group by ex.id, ex.pk

Этот вариант отлично подходит. Спасибо!
...
Рейтинг: 0 / 0
уникальность в select'e
    #33973024
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вариант очень опасный. потому что запрос может работать очень долго и занимать очень большие ресурсы. Но все естественно зависит от таблиц.

Поэтому протестируйте все очень внимательно перед тем как отправлять в продакшн. посмотрите планы, стоимости .
...
Рейтинг: 0 / 0
уникальность в select'e
    #33973064
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rec15Хотелось бы сделать выборку только с помощью SQL-запроса, не создавая никаких лишних таблиц.

он жеselect * from example ex where ex.pk =
(select min(pk) from example i where i.id = ex.id) group by ex.id, ex.pk

Этот вариант отлично подходит. Спасибо!

;)) зачё-ё-ё-т
автор топика передумал и разрешил группировки ;) ибо в первом авторском посте читаем следующее: " группировка и введение уникальности для решения задачи не подходят ".
...
Рейтинг: 0 / 0
уникальность в select'e
    #33973578
rec15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad rec15Хотелось бы сделать выборку только с помощью SQL-запроса, не создавая никаких лишних таблиц.

он жеselect * from example ex where ex.pk =
(select min(pk) from example i where i.id = ex.id) group by ex.id, ex.pk

Этот вариант отлично подходит. Спасибо!

;)) зачё-ё-ё-т
автор топика передумал и разрешил группировки ;) ибо в первом авторском посте читаем следующее: " группировка и введение уникальности для решения задачи не подходят ".

Вобще-то этот запрос прекрасно работает в таком виде select * from example ex where ex.pk =
(select min(pk) from example i where i.id = ex.id) без всяких группировок.
...
Рейтинг: 0 / 0
уникальность в select'e
    #33973933
_nicht_schissen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понял, зачем там вообще группировки были поставлены?
...
Рейтинг: 0 / 0
уникальность в select'e
    #33974657
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_nicht_schissen_не совсем понял, зачем там вообще группировки были поставлены?

От балды :)
Я ж запрос не выполнял :)
...
Рейтинг: 0 / 0
уникальность в select'e
    #33974856
_nicht_schissen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведенное выше решение не соответствует поставленной задаче,
в которой ничего не говорится про наличие уникального поля. :)

Интересно было бы посмотреть на такой запрос! С ходу не придумал как это сделать...
...
Рейтинг: 0 / 0
уникальность в select'e
    #33975353
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_nicht_schissen_Приведенное выше решение не соответствует поставленной задаче,
в которой ничего не говорится про наличие уникального поля. :)

Интересно было бы посмотреть на такой запрос! С ходу не придумал как это сделать...

Не в каждом вопросе есть полная информация.
Иногда можно чуть-чуть додумать.
Хорошо, когда ожидания оправдываются.


Если в такой таблице нет PK - без псевдоPK типа rowid (который в Oracle) и невозможности построить запрос вида
Код: plaintext
1.
select * from example ex where (ex.nopk, ex.num)  =
 (select i.nopk, i.num from example i where i.id = ex.id and rownum =  1 ) 
- вряд ли возможно :(

Oracle, блин, решает :(
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / уникальность в select'e
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]