Найти все объекты, в которых значения всех их атрибутов находятся в пределах значений атрибутов другого объекта - PullRequest
1 голос
/ 09 апреля 2019

Рассмотрим следующую таблицу:

partyId PartyName   AttributeId
------- ----------  -----------
200167  Customer1   6444
200167  Customer1   6443
200167  Customer1   6442
200112  Customer2   6443
200133  Customer3   6443
200133  Customer3   6442
200155  Customer4   6449
200155  Customer4   6442

Customer1 имеет набор атрибутов AttributeId, связанных с ним. Я буду ссылаться на это как на набор атрибутов Customer1. Клиенты 2 и 3 имеют наборы атрибутов, которые полностью в пределах набора атрибутов Customer1. Клиент 4, однако, имеет один из своих атрибутов, который не входит в набор атрибутов Клиента1 (attributeId 6449). Я пытаюсь написать SQL-запрос, который даст отдельный список сторон, где весь набор атрибутов стороны находится в наборе атрибутов customer1, и который исключает всех клиентов, чей весь набор не входит в набор атрибутов customer1. В этом примере результат должен быть:

partyId PartyName  
------- ----------  
200112  Customer2
200133  Customer3

1 Ответ

1 голос
/ 09 апреля 2019

Следующее использует агрегирование и подсчитывает количество атрибутов для данного клиента, которые соответствуют клиенту 1:

select t.customerid
from t left join
     t t1
     on t1.attributeid = t.attributeid and
        t1.customerid = 'Customer1'
group by t.customerid
having count(t.customerid) = count(t1.customerid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...