【问题标题】:Multiple joins from multiple tables来自多个表的多个连接
【发布时间】:2022-01-21 16:51:15
【问题描述】:

我正在使用 SQL Server,但在尝试从 SELECT 查询中获取结果时遇到了困难。

我有 6 张桌子:

  • Product
  • Market
  • Seller
  • Buyer
  • Customer(关于客户的数据 - 买家和卖家)
  • Currency
select * from Product;
id(PK) | name_product
-------+--------------
1      | apple
2      | orange
3      | juice
select * from Market;
OrderID(PK)   |SellOrderID(FK) | BuyOrderID(FK) | product-id
--------------+----------------+----------------+-----------
45            | 5              | 15             | 1
46            | 3              | 36             | 3
58            | 4              | 8              | 2
select * from Seller;
SellOrderID   |id_seller(PK) | id_product 
--------------+--------------+---------------------
5             | 5            | 1
3             | 3            | 3
4             | 2            | 2
select * from Buyer;
BuyOrderID    |id_Buyer(PK)  | id_product 
--------------+--------------+---------------------
15            | 1            | 1
36            | 4            | 3
8             | 6            | 2
select * from Customer;
id_customer(PK) | name_customer
----------------+---------------
1               | Alice
2               | Sam
3               | Katy
4               | Soul
5               | Fab
6               | Yas
select * from Currency;
id_product(PK,FK) | currency(PK)
------------------*-------------
1                 | EUR
2                 | USD
3                 | EUR

我希望选择客户的姓名、他们的订单、买卖的产品名称以及每种产品的货币。

但我没有得到正确的结果。我想要如下所示的结果:

name_customer  | OrderID  | name_product | currency(PK)     
---------------+----------+--------------+-------------
Alice          |  45       | apple        | EUR             
Sam            |  58       | juice        | EUR
Katy           |  46       | orange       | USD
Soul           |  46       | apple        | EUR             
Fab            |  45       | juice        | EUR
Yas            |  58       | orange       | USD

请指教

【问题讨论】:

  • 到目前为止您的尝试是什么?如果您向我们展示这一点,我们将更容易纠正您的尝试。

标签: sql sql-server join


【解决方案1】:
SELECT c.name_customer
,m.OrderID
,p.name_product
,cc.currency
FROM Customer c
INNER JOIN Buyer b ON b.id_Buyer = c.id_customer
INNER JOIN Market m ON m.BuyOrderID = b.BuyOrderID
INNER JOIN Product p ON p.id = m.product-id
INNER JOIN Currency cc ON cc.id_product = p.id

希望它应该工作!如果没有,请告诉我。

【讨论】:

  • 我认为在买方和市场之间的连接中包含产品 ID 是一个好主意,否则如果买方购买多个产品,您最终可能会得到多对多笛卡尔产品单一的买单。它在 OP 示例中运行良好,但可能会因更多真实数据而崩溃。 (但也许这是一个家庭作业问题......谁知道)。无论如何,在三个不同的表中包含产品 ID 让我相信它可能是加入 market 的关键的一部分。
  • 您好,非常感谢您的帮助!订单涉及买家和卖家,但在您的查询中,我只在买家表上找到一个连接。你能解释一下你的逻辑吗?非常感谢
  • 根据你的结果,
  • 每个匹配的订单都有一个 sellID 和 buyID (table market, table Seller, table Buyer),所以每个卖家ID 和买家ID 在他们的篮子里都有订单。然后,每个买家和卖家在表 customer 中都有一个对应的名称。
  • 根据您的结果,让我们考虑第一行。我们可以得出结论,Alice 订购了“apple”,orderID 为 45,并以“EUR”货币支付。这些值仅在我们考虑具有相同 BuyOrderID(值 15)的 Buyer 表和 Market 表时才匹配,这在 Market 表上的 orderID 为 45,并且与 Alice 数据对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多