Имейте следующую гипотетическую таблицу User_Mail_Info в Oracle DB

| User_Id | Mail_DL | DLId     |.....
--------------------------------
|  User1  |  DLA    |   1      |
|  User1  |  DLB    |   2      |
|  User2  |  DLA    |   1      |
|  User2  |  DLB    |   2      |
|  User2  |  DLC    |   3      |......
|  User3  |  DLA    |   1      |
|  User3  |  DLC    |   2      |
|  User3  |  DLB    |   3      |......

Первичный ключ - User_Id, Mail_DL, DLId. Есть и другие столбцы с таблицей.

Как получить UserId, учитывая список (Mail_DL и DL Id)?

Примечание: Mail_DL и DL_Id не связаны напрямую. Это всего лишь гипотетические данные

Например, Вход

  • (DLA, 1), (DLB, 2) - выход должен быть User1
  • (DLA, 1), (DLB, 2), (DLC, 3) - выход должен быть User2
  • (DLA, 1), (DLC, 2), (DLB, 3) - выход должен быть User3

Заранее спасибо за помощь.

0
googytech 3 Май 2021 в 23:33

1 ответ

Лучший ответ

Вы можете использовать агрегирование и фильтрацию. Для первого примера:

select user_id
from t
group by user_id
having sum(case when mail_id = 'DLA' and dlid = 1 then 1 else 0 end) > 0 and
       sum(case when mail_id = 'DLB' and dlid = 2 then 1 else 0 end) > 0 and
       count(*) = 2;
   
1
Gordon Linoff 3 Май 2021 в 20:36