Как сформулировать запрос SQL, в котором нужно указать четыре разные таблицы? - PullRequest
0 голосов
/ 20 марта 2020

Я хочу получить название компании и всех продуктов, которые они приобрели, в одном запросе SQL.

Используемая база данных - это образец базы данных Northwind. Отношения между этими столбцами и таблицами базы данных выглядят так:

ProductName <- [T]Products     -> [K]ProductID
                                       /\
                                       ||
                                       \/
               [T]OrderDetails -> [K]ProductID
                               .. [K]OrderID
                                       /\
                                       ||
                                       \/
               [T]Orders       -> [K]OrderID
                               .. [K]CustomerID
                                       /\
                                       ||
                                       \/
CompanyName <- [T]Customers    -> [K]CustomerID

Где [T] - таблица, а [K] - ключи таблицы.

Я пытался получить хотя бы соответствующее название продукта, но SQL Сервер сообщает, что такое включение недопустимо.

SELECT ProductName
  FROM Products
 WHERE ProductID IN (SELECT ProductID
                       FROM [Order Details]
                      WHERE OrderID IN (SELECT OrderID, CustomerID
                                          FROM Orders));

Как мне указать четыре разные таблицы в одном запросе?

1 Ответ

2 голосов
/ 20 марта 2020

Похоже, вы ищете объединения:

select distinct c.companyName, p.productName
from customers c
inner join orders o on o.customerID = c.customerID
inner join orderdetails od on od.orderID = o.orderID
inner join products p on p.productID = od.productID

Это дает для каждой компании список всех (отдельных) продуктов, которые были приобретены ее клиентами.

...