SQL сравнить весь набор данных - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два набора данных, и я хочу сравнить все данные, относящиеся к конкретному идентификатору usr.Если эти данные не совпадают полностью, тогда дайте мне нулевое значение.

Ниже я должен получить user_id = null, потому что не все данные в доступе к столбцам одинаковы

set a
user_id     | access 
1001        | hotel
1001        | spa
1001        | gym

set b
user_id     | access 
1001        | hotel
1001        | spa
1001        | pool

В следующем случаеЯ должен получить user_id = 1001, потому что все данные в доступе к столбцу одинаковы

set a
user_id     | access 
1001        | hotel
1001        | spa
1001        | gym

set b
user_id     | access 
1001        | hotel
1001        | spa
1001        | gym

Как должен выглядеть SQL-запрос, чтобы получить этот эффект?Я работаю над базой данных Oracle.

1 Ответ

0 голосов
/ 03 октября 2018

Если у вас есть две отдельные таблицы и вы хотите, чтобы пользователи были в точности эквивалентны, то listagg() - это простое решение:

select a.user_id
from (select user_id, listagg(access, ',') within group (order by access) as accesses
      from a
      group by user_id
     ) a join
     (select user_id, listagg(access, ',') within group (order by access) as accesses
      from b
      group by user_id
     ) b 
     on a.user_id = b.user_id and a.accesses = b.accesses;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...