Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 SQL запрос  [new]
Er4SuS
Member

Откуда:
Сообщений: 1
Добрый день.

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

Есть таблица 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) )

Сообщение было отредактировано: 22 июн 20, 13:57
22 июн 20, 13:56    [22155134]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
PuM256
Member

Откуда:
Сообщений: 35
Первое, что в голову пришло:

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
22 июн 20, 14:13    [22155146]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
PuM256,

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

....
stax
22 июн 20, 14:18    [22155155]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29861
Stax
если пары u, g неуникальны, нужен дистинкт
Ага. Спрятать говнокод за distinct-ом - это же так доброжелательно.
22 июн 20, 15:54    [22155220]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить