【问题标题】:2 SQL Server Inner Joins in Select Statement2 SQL Server 内部联接在 Select 语句中
【发布时间】:2014-10-28 13:24:44
【问题描述】:

这可能是一个简单的问题,很抱歉。

我有一个 SQL 选择语句,我有 2 列,它们都是同一个表的外键。这是一个例子:

产品 ID = 5 |卖家(用户 ID)= 3 |买家(用户 ID)= 2

我希望选择语句返回

产品 = 5 |卖家(用户 ID)= 加里琼斯 |买家(用户 ID)= 约翰·史密斯

Select Product.ID
       User.ID as Seller
       User.ID as Buyer
From   Orders
Inner Join Product on Product.ID = Orders.ProductID
Inner Join User on User.ID = Orders.UserID --(For both buyer and seller)

买家可能不是用户,因此如果没有用户,则应留空:

产品 = 5 |卖家(用户 ID)= 加里琼斯 |买家(用户 ID)= 空

【问题讨论】:

  • 将您的第二个 Inner Join 更改为 Left Join
  • 2 更改...左连接到表以返回空值(内部将删除记录),您将需要两个连接两个用户,一个用于买方,一个用于卖方(除非它们始终是同一个人?)。您的订单表中是否有独立于卖家 ID 的买家 ID?
  • @Twelfth 它们是同一个表中的单独字段,它们都链接到用户表中的同一字段。如何进行 2 次连接?
  • 是的......下面的两个答案似乎都解决了这个问题。您可以根据需要多次加入同一个表(嗯,直到这些引擎支持的逻辑最大值)

标签: sql sql-server select stored-procedures join


【解决方案1】:

您需要左连接来获取买家不是用户的行,并且还需要加入用户表两次:

Select Product.ID
       u1.ID as Seller -- this should maybe be u1.name and not id?
       u2.ID as Buyer
From   Orders
Inner Join Product on Product.ID = Orders.ProductID
Inner Join User u1 on u1.ID = Orders.SellerID --(For seller)
Left Join User u2 on u2.ID = Orders.BuyerID --(For buyer )

我假设您的 Orders 表存储带有 ID 的买方和卖方,您应该使用这些 ID 加入 User 表。在我使用 BuyerID 和 SellerID 的示例查询中,您必须更改它以反映正确的名称。

【讨论】:

  • 谢谢,非常感谢 :)
【解决方案2】:

假设您的订单表上有买家和卖家 id 列,它们是用户表的外键 - 我分别将它们命名为 BuyerID 和 SellerID。我也对其他列名做了一些假设。

SELECT 
    p.ID,
    P.ProductName,
    u1.Name as Seller,
    u2.Name as Buyer
FROM Orders o
INNER JOIN Product p ON p.ID = o.ProductID
LEFT JOIN User u1 ON u1.ID = o.SellerID
LEFT JOIN User u2 ON u2.ID = o.BuyerID

【讨论】:

  • 谢谢,非常感谢 :)
  • @user3279193 没问题,很高兴为您提供帮助。
猜你喜欢
  • 2013-05-24
  • 2023-04-03
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多