#sql #sql-server #join
#sql #sql-сервер #Присоединиться
Вопрос:
Рассмотрим следующую таблицу:
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 есть набор атрибутов, связанных с ним. Я буду ссылаться на это как на набор атрибутов Customer1. Клиенты 2 и 3 имеют наборы атрибутов, которые полностью входят в набор атрибутов Customer1. Однако у клиента 4 есть один из его атрибутов, которого нет в наборе атрибутов Customer1 (AttributeID 6449). Я пытаюсь написать SQL-запрос, который выдаст отдельный список сторон, где весь набор атрибутов участника находится в наборе атрибутов customer1, и это исключает всех клиентов, весь набор которых не входит в набор атрибутов customer1. В этом примере результат должен быть:
partyId PartyName
------- ----------
200112 Customer2
200133 Customer3
Ответ №1:
Следующее использует агрегирование и подсчитывает количество атрибутов для данного клиента, которые соответствуют клиенту 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);
Комментарии:
1. Спасибо, Гордон. Именно то, что мне было нужно!