powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести уникальные значения без DISTINCT
13 сообщений из 13, страница 1 из 1
Вывести уникальные значения без DISTINCT
    #39883513
KtoYa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Столкнулся с такой задачей.
Условно есть две связанные таблицы

User Char
№ name №_us Opt
1 Василий 1 x
2 Алексей 2 x,y,z
3 Иван 3 z
4 Александр 4 a,b
5 Сергей 5 y,z

Необходимо вывести пользователей, для которых в столбце opt соответствует хотя бы один из параметров x,y,z. При этом важно, чтобы пользователи не повторялись. Как это можно сделать без применения DISTINCT и GROUP BY?

То есть правильным вариантом в данном случае будет вывод (если по номерам)
1
2
3
5
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883534
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KtoYaчтобы пользователи не повторялисьНерепрезентативные данные.

KtoYaбез применения DISTINCT и GROUP BYjoin может быть неявный (semi)
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883537
KtoYa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
User
№ name
1 Василий
2 Алексей
3 Иван
4 Александр
5 Сергей

Char
№_us Opt
1 x
2 x,y,z
3 z
4 a,b
5 y,z

Для лучшей смотрительности.
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883560
KtoYa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,
Пытался, закладывая внутрь, помимо условия равенства номеров еще IN(x,y,z), однако не получается почему то.
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883569
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KtoYaПытался, закладывая внутрьДля решения проблем достаточно закладывать за воротник.
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883577
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KtoYa,

Сир,
Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
)
select col2 from tbl...


2) Покажите что сделали,

3) используйте Тэги, читать код без них неудобно
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883653
yvprod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KtoYa, exists
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883663
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KtoYa,

Если в одной из таблиц клиенты уникальные, то можно через exists
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39883731
KtoYa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за участие. Нашёл ошибку.
В начале джойнил сразу вторую таблицу (в которой содержаться указатели x,y,z), поэтому, при использовании exists и размещение внутри него ссылки на первую таблицу (юзеры) запросы дублировались.
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39884320
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KtoYaВывести уникальные значения без DISTINCT
group by по всем полям
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39887769
microbash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KtoYa,

а где собственно в задании повторы имен?
Если взять задание с повторами имен, например:


Табличка sql1
Код: plsql
1.
2.
3.
4.
5.
6.
N	NAME
1	Василий
2	Алексей
3	Иван
4	Александр
5	Василий



Табличка sql2
Код: plsql
1.
2.
3.
4.
5.
6.
N_US	OPT
1	x
2	x,y,z
3	z
4	a,b
5	y,z



И нужно выбрать пользователей без повторов (именно пользователей, как указано в задании, а не их номера), то у меня получилось:

Код: plsql
1.
2.
3.
4.
5.
6.
select name from (
select 
first_value(name) over (partition by name order by name) as name,
row_number() over (partition by name order by name) as rowno
 from sql1, sql2 where sql1.n = sql2.n_us and (sql2.opt like '%x%' or sql2.opt like '%y%' or sql2.opt like '%z%')
) where rowno = 1;



Выдает:
Код: plsql
1.
2.
3.
4.
NAME
Алексей
Василий
Иван
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39887843
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
micrеbash
И нужно выбрать пользователей без повторов (именно пользователей, как указано в задании, а не их номера)
У сущности User есть поля № и name. Дай-ка подумать, что есть пользователь...
...
Рейтинг: 0 / 0
Вывести уникальные значения без DISTINCT
    #39887849
microbash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно даже и номер добавить, только задать критерий выбора из одинаковых имен, например первую запись или последнюю.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select n,name from (
select 
first_value(name) over (partition by name order by name) as name,
first_value(n) over (partition by name order by name) as n,
row_number() over (partition by name order by name) as rowno
 from sql1, sql2 where sql1.n = sql2.n_us and (sql2.opt like '%x%' or sql2.opt like '%y%' or sql2.opt like '%z%')
) where rowno = 1 order by n;



Выдача:
Код: plsql
1.
2.
3.
4.
N	NAME
1	Василий
2	Алексей
3	Иван



Или так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select n,name from (
select 
first_value(name) over (partition by name order by name) as name,
last_value(n) over (partition by name order by name) as n,
row_number() over (partition by name order by name) as rowno
 from sql1, sql2 where sql1.n = sql2.n_us and (sql2.opt like '%x%' or sql2.opt like '%y%' or sql2.opt like '%z%')
) where rowno = 1 order by n;



Выдача:
Код: plsql
1.
2.
3.
4.
N	NAME
2	Алексей
3	Иван
5	Василий
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести уникальные значения без DISTINCT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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