Выберите все имена клиентов, которые купили все продукты, купленные Клиентом с идентификатором «CENTC».

#sql-server #join #northwind

Вопрос:

Я использую базу данных Northwind

На данный момент я попытался

Именно там я выбираю Заказы Клиента

 select od.ProductID from Customers c JOIN
Orders o on c.CustomerID=o.CustomerID
JOIN [Order Details] od on o.OrderID=od.OrderID
where c.CustomerID='CENTC'
 

И вот мое решение

 select distinct c.CompanyName, sum(od.ProductID) as suma from Customers c JOIN
Orders o on c.CustomerID=o.CustomerID
JOIN [Order Details] od on o.OrderID=od.OrderID
where od.ProductID = '40' or od.ProductID = '11'
group by c.CompanyName
having sum(od.ProductID)='51'
 

Но это одноразовое решение, поэтому я не удовлетворен.

Ответ №1:

Для этого вы можете использовать IN подзапрос

 SELECT
  c.CompanyName,
  c.ContactName,
  SUM(od.quantity) AS quantity
FROM Customers c
JOIN Orders o on c.CustomerID = o.CustomerID
JOIN OrderDetails od on o.OrderID = od.OrderID
WHERE od.ProductID IN (
    SELECT od2.ProductID
    FROM Orders o2
    JOIN OrderDetails od2 on o2.OrderID = od2.OrderID
    WHERE o2.CustomerID = 'CENTC'
)
GROUP BY
  c.CustomerID,
  c.CompanyName,
  c.ContactName;