[英]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.