将配件与订单中的产品结合在一起

时间:2019-03-29 08:10:22

标签: sql tsql ssms

这些是我的表格:

Order 
-Id PK
-Timestamp
-Seller
-Buyer

OrderItem
-Id PK
-OrderId FK
-ProductId FK
-AccessoryId FK

Products
-Id PK
-Name
-Price

Accessories
-Id PK
-Name
-Price

ProductAccessories
-Id PK
-ProductId FK
-AccessoryId FK

现在,我有以下查询来获取至少1年的所有订单:

SELECT [Id]
      ,[Timestamp]
      ,[Seller]
      ,[Buyer]
  FROM [dbo].[Order]
  WHERE Timestamp <= getdate()-365

现在是我的问题。运行此查询后,我需要另一个帮助。 我想获取所有具有forgein键的产品的附件,该附件属于通过上述查询检索的特定OrderId的一部分

我无法确定我必须在这里进行多少次联接。

1 个答案:

答案 0 :(得分:0)

这需要很多JOIN,但是我想这就是你想要的

SELECT a.*
  FROM [dbo].[Order] o
  JOIN OrderItem oi ON oi.OrderId = o.Id
  JOIN Products p ON p.Id = oi.ProductId
  JOIN ProductAccessories pa ON pa.ProductId = p.Id
  JOIN Accessories a ON a.Id = pa.AccessoryId
  WHERE o.[Timestamp] <= DATEADD(year, -1, GETDATE())