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

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

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

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

Если на таблице есть 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
07.09.2006, 20:20
    #33972393
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
Я бы создал таблицу с кластерным индексом на это поле и с параметром IGNORE_DUP_KEY и вставил бы туда все данные. Дублирующие записи удалятся при этом автоматом.
...
Рейтинг: 0 / 0
08.09.2006, 06:01
    #33972666
rec15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
Хотелось бы сделать выборку только с помощью 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
08.09.2006, 10:24
    #33973024
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
Этот вариант очень опасный. потому что запрос может работать очень долго и занимать очень большие ресурсы. Но все естественно зависит от таблиц.

Поэтому протестируйте все очень внимательно перед тем как отправлять в продакшн. посмотрите планы, стоимости .
...
Рейтинг: 0 / 0
08.09.2006, 10:33
    #33973064
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
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
08.09.2006, 12:34
    #33973578
rec15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
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
08.09.2006, 13:38
    #33973933
_nicht_schissen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
не совсем понял, зачем там вообще группировки были поставлены?
...
Рейтинг: 0 / 0
08.09.2006, 15:51
    #33974657
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
_nicht_schissen_не совсем понял, зачем там вообще группировки были поставлены?

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

Интересно было бы посмотреть на такой запрос! С ходу не придумал как это сделать...
...
Рейтинг: 0 / 0
08.09.2006, 20:10
    #33975353
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность в select'e
_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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / уникальность в select'e / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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