Как создать подзапрос SQL ON JOIN, используя несколько таблиц - PullRequest
2 голосов
/ 12 октября 2011

У меня есть следующие таблицы.

ORDER
OrderNumber
CustomerNumber
EmployeeNumber
OrderDate

ЗАКАЗЧИК
CustomerNumber
Имя
Адрес

СОТРУДНИК
EmployeeNumber
Имя
Адрес

ORDERDETAIL
OrderNumber
Кол-во
Описание
Цена

Пусть, скажем, таблица ORDERDETAIL имеет 10 записей

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

Я знаю, что могу написать запрос и использовать INNER JOIN для получения информациииз таблицы ORDER, но как создать оставшуюся часть запроса для получения информации из таблиц CUSTOMER и EMPLOYEE.

SELECT * 
  FROM OrderDetail D 
       INNER JOIN Order O 
          ON D.OrderNumber = O.OrderNumber;

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Просто добавьте еще несколько объединений ...

SELECT *
FROM OrderDetail D
JOIN Order USING (OrderNumber)
JOIN Customer USING (CustomerNumber)
JOIN Employee USING (EmployeeNumber)

Возможно, вы захотите изменить порядок соединений, чтобы сначала иметь наименьшие таблицы, поскольку это может повысить производительность (в зависимости отверсия вашего сервера, самая последняя версия оптимизирует объединение для вас и может фактически выполнить объединения «вероятно лучшим» способом.

Кроме того, по крайней мере на диалекте MySQL, JOIN неявно расширяется до INNER JOIN, а запись

A JOIN B USING (COL)

эквивалентна записи

A JOIN B ON (A.COL = B.COL)
1 голос
/ 12 октября 2011
SELECT * 
FROM OrderDetail D 
INNER JOIN Order O ON D.OrderNumber = O.OrderNumber
INNER JOIN Eployee E on O.EployeeNumber = E.EployeeNumber
INNER JOIN Customer C on O.CustomerNumber = C.CustomerNumber
0 голосов
/ 12 октября 2011

если у вас есть ссылка внешнего ключа между

ORDER.EmployeeNumber and EMPLOYEE.EmployeeNumber
ORDER.CustomerNumber and CUSTOMER.CustomerNumber

, попробуйте это

SELECT 
      E.name AS employeeName, 
      E.Address AS employeeAddress,
      C.name AS customerName,
      C.Address AS customerAddress.
      O.OrderDate
FROM OrderDetail D 
INNER JOIN Order O ON D.OrderNumber = O.OrderNumber
INNER JOIN EMPLOYEE E ON E.EmployeeNumber = 0.EmployeeNumber
INNER JOIN CUSTOMER C ON C.CustomerNumber= 0.CustomerNumber 
LIMIT 0,10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...