2 Select语句中的SQL Server内部联接

时间:2014-09-03 22:23:35

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

这可能是一个很难解决的简单问题。

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

  

ProductID = 5 |卖方(UserID)= 3 |买方(UserID)= 2

我希望select语句返回

  

产品= 5 |卖方(UserID)= Gary Jones |买方(UserID)= John Smith

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)

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

  

产品= 5 |卖方(UserID)= Gary Jones |买方(UserID)=空

2 个答案:

答案 0 :(得分:1)

假设您的订单表上有买家和卖家ID列,并且他们是User表的外键 - 我将它们分别命名为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

答案 1 :(得分: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,它是那些你应该加入User表的人。在示例查询中,我使用了BuyerID和SellerID,您必须更改它以反映正确的名称。