Где пункт с внутренним соединением не работает для таблицы заказов - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть следующие таблицы (с их столбцами в скобках):

  • products (productID, productName, categoryID)
  • category (categoryID, categoryName)
  • клиенты (customerID, customerName)
  • заказы (customerID, create_at, productID)

Я могу успешно использовать внутреннее объединение, чтобы отобразить все детали заказа и включить имена продуктов и клиентов.

select products.productName, orders.create_at, customers.customerName 
from orders 
inner join products on orders.productID=products.productID 
inner join customers on orders.customerID=customers.customerID;

Теперь я хочу отображать только те заказы, в которых товар относится к категории "ноутбук". И моя попытка была следующей:

select products.productName, orders.create_at, customers.customerName 
from orders 
inner join products on orders.productID=products.productID 
inner join customers on orders.customerID=customers.customerID where categories.categoryName='laptop';

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

Я получаю следующую ошибку:

ERROR 1054 (42S22): Unknown column 'categories.categoryName' in 'where clause'

Как я могу показать только заказы, продукты которых относятся к определенной категории c?

1 Ответ

4 голосов
/ 11 апреля 2020

Вы должны присоединиться к таблице categories:

select products.productName, orders.create_at, customers.customerName 
from orders 
inner join products on orders.productID=products.productID 
inner join categories on categories.categoryID=products.categoryID
inner join customers on orders.customerID=customers.customerID 
where categories.categoryName='laptop';

Должен быть столбец типа categoryID в products и categories. Иногда товар может относиться к более чем 1 категориям. В этом случае должна быть другая таблица, которая связывает товары с категориями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...