来自4个表的SQL查询

时间:2015-10-11 04:12:25

标签: mysql sql database oracle

我使用3个表来获取一定数量的记录。 以下是我的表格:

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

现在,对于前10个订单,我必须从这4个表中获取orderNumber,CustomerName和productName。我已经完成了多个查询,但无法获得所需的结果,如: -

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

使用这个我只是想获得orderNumber,productCode和CustomerNumber所以我可以构建我的查询,但它只显示订单中每个orderNumber的一个产品,而不是单个orderNumber中的所有产品。

+-------------+-------------+----------------+
| 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 |

编辑1: 从Order表中的前10个订单开始,我需要从给定的表中获取相应的OrderNumber,CustomerName和productName。

编辑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.              |

2 个答案:

答案 0 :(得分: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

注意:您的查询是

的一半

根据您的解释进行修改:

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
        )
    )

答案 1 :(得分:0)

如果使用Sql Server

,请尝试以下操作

选择前10个Orders.orderNumber,OrderDetails.productCode,Orders.customerNumber     来自Orders,OrderDetails     其中Orders.orderNumber = OrderDetails.orderNumber;

所有sql数据库都不支持