繁体   English   中英

来自 4 个表的 SQL 查询

[英]SQL Query from 4 tables

我正在使用 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 的 Orders 中的一个产品,而不是单个 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.              |

您的问题不清楚,请详细说明您的目标。

但是,如果我理解正确,您还希望在结果“产品名称和客户名称”中获得他的姓名,因此,您可能需要使用 Joins

示例查询:

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

如果使用 Sql Server,请尝试以下操作

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

并非所有 sql 数据库都支持限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM