将产品与一个或多个客户要求匹配[MS SQL]

时间:2016-10-27 11:57:40

标签: sql-server select matching temp-tables

在我们的网站上,客户可以保存一个或多个愿望清单'根据类型,价格等描述他们想要购买什么的记录。然后我们使用这些记录每天向他们发送有关符合其要求的新产品的电子邮件。

我需要一次查询客户的愿望清单记录,并输出今天添加的所有使用存储过程匹配的记录。然后,客户可以在其“帐户”页面中轻松查看任何匹配的产品,我们也可以使用电子邮件的代码。

示例产品表

ID:1243

  • 产品类型:衬衫
  • 品牌:Nike
  • 价格:39
  • 颜色:红色

ID:2342

  • 产品类型:衬衫
  • 品牌:阿迪达斯
  • 价格:49
  • 颜色:蓝色

ID:6456

  • 产品类型:裤子
  • 品牌:Nike
  • 价格:29
  • 颜色:黑色

ID:3423

  • 产品类型:裤子
  • 品牌:Fila
  • 价格:49
  • 颜色:红色

ID:7656

  • 产品类型:衬衫
  • 品牌:Fila
  • 价格:19
  • 颜色:黑色

示例愿望清单记录客户#2

AccountID:2

  • 产品类型:衬衫
  • 品牌:Nike
  • MaxPrice:50
  • 颜色:蓝色

AccountID:2

  • 产品类型:裤子
  • 品牌:Nike
  • MaxPrice:30
  • 颜色:任何

所以我需要将AccountID传递给存储过程并输出任何与Wishlist记录匹配的产品。

到目前为止,这是将两个心愿单记录放入临时表:

CREATE PROCEDURE dbo.MATCH_CUSTOMER_REQS
   @AccountID int
AS
BEGIN
   /* select all wishlists */
   INSERT INTO #TempTable (ProductType,Brand,MaxPrice,Colour)
   SELECT
   ProductType,
   Brand,
   MaxPrice,
   Colour
   FROM Accounts_Wishlists
   WHERE fk_AccountID=@AccountID       
END

我不知道如何循环并整理所有匹配产品的列表。

非常感谢。

1 个答案:

答案 0 :(得分:0)

请试试这个:

SELECT  b.ProductType, b.Brand, b.Price, b.Colour
  FROM  Accounts_Wishlists AS a
  JOIN  PRODUCTS AS B 
    ON b.ProductType = a.ProductType
   AND b.Brand = a.Brand
   AND b.Price <= a.MaxPrice 
   AND (a.Colour = b.Colour OR a.Colour is null)
 WHERE a.AccountID = @AccountID