SQL: использование группы для проверки существования значения по отдельному списку строк

Я пытаюсь сгруппировать по OrderID и lineID и вернуть только уникальный orderID и lineID из групп, которые включают любые значения в отдельный список строк.

Вот некоторые примерные данные.

 OrderID        lineID  positionID   fieldOfInterest    somefield1   somefield2 ....
   1A2          10248       1          '10xa'              -           -
   1A2          10248       2          '42-vf'             -           -
   1A2          10248       3          '10xb'              -           -
   1A2          10249       2          '10xa'              -           -
   1C3          11200       5          '10002'             -           -
   1C3          10250       1          'N52O'              -           -
   1V8          10250       7          'fas01'             -           -
   1V8          10250       8          '10002'             -           -
   .             .          .           .                  .           .
   .             .          .           .                  .           .
   .             .          .           .                  .           .
separate list to search groups against: ('10xa','10002')

Результат, который я ищу, будет

  OrderID        lineID  
    1A2          10248       <------ group contained '10xa' 
    1A2          10249       <------ group contained '10xa' 
    1C3          11200       <------ group contained '10002'
    1V8          10250       <------ group contained '10002'

я пытался

having (min(fieldOfInterest) in ('10xa','10002')) or (max(fieldOfInterest) in ('10xa','10002')) 

но я не думаю, что это будет работать все время. Может быть, есть какое-то соединение, которое я могу сделать в списке строк и таблице.


person Joseph    schedule 23.05.2020    source источник


Ответы (1)


В Postgres я бы рекомендовал агрегацию и bool_or() :

select orderID, lineID
from mytable
group by orderiD, lineID
having bool_or(fieldOfInterest in ('10xa','10002'))
person GMB    schedule 23.05.2020