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

Столкнулся со следующей проблемой.

Есть таблица SUBJ которая содержит в себе 2 колонки: имя пользователя, группа доступа.

Примерное содержание:

username group
Er4SuS group 1
Er4SuS group 2
Er4SuS group 3
AnyUser group 1
AnyUser group 2

На входе у меня есть список пользователей, мне нужно вывести только те группы в которых прописаны все пользователи на входе.

2 очевидных, но трудоемких варианта в случае если на входе ~ 50 пользаков:

1)

SELECT t1.group FROM
(SELECT group FROM SUBJ WHERE username = 'Er4SuS') a,
(SELECT group FROM SUBJ WHERE username = 'AnyUser') b
WHERE a.group = b.group

2)

SELECT group FROM SUBJ s
WHERE EXISTS (SELECT * FROM SUBJ s# WHERE s#.username = 'Er4SuS' and s#.group = s.group)
and EXISTS (SELECT * FROM SUBJ s# WHERE s#.username = 'AnyUser' and s#.group = s.group)

Результат запроса: group1 и group2


Может быть есть какой-нибудь хитрый вариант, у меня получалось сделать через count, но в итоге получаю только одну группу, а таких групп может быть несколько, в моем случае нужно вывести группы, в которых прописаны все 54 пользователя по списку. Таких групп 8 (приседал со сцепкой в excel по способу 1) )
...
Рейтинг: 0 / 0
SQL запрос
    #39971831
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первое, что в голову пришло:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> With
  2      usergroups (u, g) As
  3          (Select 'user1', 'group1' From DUAL
  4           Union All
  5           Select 'user2', 'group1' From DUAL
  6           Union All
  7           Select 'user1', 'group2' From DUAL
  8           Union All
  9           Select 'user3', 'group1' From DUAL
10           Union All
11           Select 'user2', 'group2' From DUAL
12           Union All
13           Select 'user1', 'group3' From DUAL),
14      users (u) As
15          (Select 'user1' From DUAL
16           Union All
17           Select 'user2' From DUAL)
18    Select g
19      From users u, usergroups ug
20     Where u.u = ug.u
21  Group By g
22    Having COUNT (*) = (Select COUNT (*) From users);

G
------
group1
group2
...
Рейтинг: 0 / 0
SQL запрос
    #39971838
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256,

если пары u, g неуникальны, нужен дистинкт

....
stax
...
Рейтинг: 0 / 0
SQL запрос
    #39971887
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
если пары u, g неуникальны, нужен дистинкт
Ага. Спрятать говнокод за distinct-ом - это же так доброжелательно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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