2015-10-11 5 views
-1

Я использую 3 таблицы для получения определенного количества записей. Ниже приведены мои таблицы:SQL Query from 4 tables

1.Order   - orderNumber,CustomerNumber 
2. OrderDetails - orderNumber, productCode 
3. Products  - productCode, productName 
4. Customers - CustomerNumber, CustomerName 

Теперь первые 10 заказов, которые я должен получить ORDERNUMBER, CUSTOMERNAME и PRODUCTNAME из этих 4 таблиц. Я сделал несколько запросов, но не в состоянии получить желаемые результаты как: -

select Orders.orderNumber, OrderDetails.productCode,Orders.customerNumber 
    from Orders, OrderDetails 
    where Orders.orderNumber = OrderDetails.orderNumber limit 10; 

Используя это, я просто пытаюсь получить только ORDERNUMBER, ProductCode и CustomerNumber, так что я могу построить мой запрос по этому поводу, но это только показывает, один продукт из Заказов для каждого номера заказа, а не всех продуктов внутри одного номера заказа.

+-------------+-------------+----------------+ 
| orderNumber | productCode | customerNumber | 
+-------------+-------------+----------------+ 
|  10100 | S18_1749 |   363 | 
|  10100 | S18_2248 |   363 | 
|  10100 | S18_4409 |   363 | 
|  10100 | S24_3969 |   363 | 
|  10101 | S18_2325 |   128 | 
|  10101 | S18_2795 |   128 | 
|  10101 | S24_1937 |   128 | 
|  10101 | S24_2022 |   128 | 
|  10102 | S18_1342 |   181 | 
|  10102 | S18_1367 |   181 | 

Edit 1: Из первых 10 заказов в таблице заказа, мне нужно получить соответствующие ORDERNUMBER, CUSTOMERNAME и PRODUCTNAME из данных таблиц.

Edit 2: Результат запроса в соответствии с @simsim

orderNumber | productCode | customerName     | 
+-------------+-------------+------------------------------+ 
|  10100 | S18_1749 | Online Diecast Creations Co. | 
|  10100 | S18_2248 | Online Diecast Creations Co. | 
|  10100 | S18_4409 | Online Diecast Creations Co. | 
|  10100 | S24_3969 | Online Diecast Creations Co. | 
|  10101 | S18_2325 | Blauer See Auto, Co.   | 
|  10101 | S18_2795 | Blauer See Auto, Co.   | 
|  10101 | S24_1937 | Blauer See Auto, Co.   | 
|  10101 | S24_2022 | Blauer See Auto, Co.   | 
|  10102 | S18_1342 | Vitachrome Inc.    | 
|  10102 | S18_1367 | Vitachrome Inc.    | 

ответ

0

Ваш вопрос не ясно, пожалуйста, объясните свою цель больше.

Однако, если я правильно понял, вы хотите, чтобы он называет также в вашем результате «Наименование и имя клиента», поэтому, возможно, придется использовать Присоединяется

Пример запроса:

SELECT 
    OrderNumber, 
    ProductCode, 
    ProductName, 
    CustomerNumber, 
    CustomerName 
FROM 
(
    Select 
     O.OrderNumber, 
     P.ProductCode, 
     P.ProductName, 
     C.CustomerNumber, 
     C.CustomerName 
    From 
     Orders O 
     INNER JOIN OrderDetails OD On 
      O.OrderNumber = OD.OrderNumber 
      INNER JOIN Products P On OD.ProductCode = P.ProductCode 
     INNER JOIN Customers C On O.CustomerNumber = O.CustomerNumber 
) 
WHERE ROWNUM <= 10 

Примечание: ваш запрос на половину пути там

Edit, на основе ваших объяснений:

SELECT 
     OrderNumber, 
     ProductCode, 
     ProductName, 
     CustomerNumber, 
     CustomerName 
    FROM 
    (
     Select 
      O.OrderNumber, 
      P.ProductCode, 
      P.ProductName, 
      C.CustomerNumber, 
      C.CustomerName 
     From 
      Orders O 
      INNER JOIN OrderDetails OD On 
       O.OrderNumber = OD.OrderNumber 
       INNER JOIN Products P On OD.ProductCode = P.ProductCode 
      INNER JOIN Customers C On O.CustomerNumber = O.CustomerNumber 
     WHERE O.OrderNumber IN 
     (
      SELECT OrderNumber FROM Orders 
      WHERE ROWNUM <= 10 
     ) 
    ) 
+0

Прошу прощения за то, что вы неоднозначны. Позвольте мне изменить вопрос и проверить ваше решение. Спасибо за помощь. –

+0

Я могу получить правильный шаблон, но не могу взять всего 10 заказов. В соответствии с вышеприведенным запросом в первом запросе выбора появляется ошибка «неизвестный столбец». –

+0

вы добавили тег oracle, поэтому, если это синтаксис oracle, используйте фильтр «ROWNUM», как в моем ответе, используйте упорядочение во внутреннем запросе, затем отфильтруйте его снова, как указано выше – simsim

0

Попробуйте следующее при использовании SQL Server

выбрать лучшие 10 Orders.orderNumber, OrderDetails.productCode, Orders.customerNumber от заказов, OrderDetails , где Orders.orderNumber = OrderDetails.orderNumber;

ограничение не поддерживается всеми базами данных sql.