2013-02-11 123 views
0

好了,所以这里是我的数据库中提取SQL查询匹配表(分配)

customers- ID, Fname, LName, Username, Password 
Products - ProductsID, Name 
Requests - requestid, productsid[fk for products table], cid[fk for customers table], 
quantity, matchType 
sellers - saleid, productsid[fk for products table], cid[fk for customers table], quantity 
price. 

因此,他们是我的FK表示外键的表...现在我遇到的问题是说,这是从提取物表中的值

customers=1,John,Smith,js123,123 
customers=2,Joe,bloggs,jb555,abc 
products=1,Sweets 
products=2, chocolate 
requests=1, 2, 1, 200, Exact 
requests=2, 1, 1, 50, HighQuality 
sellers =1,2,2,200,5.00 

确定,所以到底是怎么回事。这是我们的客户2和2个产品(糖果和chcolates),请求表显示..的RequestID [主键],产品ID,客户ID谁已请求产品,以克为单位的数量以及他们希望如何匹配显示。 因此,如果我们采取第一个请求,它会读取如下... REquestID 1 [pk],想要chcolates(2),想要choclate的用户是约翰史密斯,他想要200克的价值,这是完全符合他的要求... 现在我们有一个卖家,即joe bloggs,他以200英镑的价格销售200克chcolates ... 现在我遇到的问题是如何运行与此卖家相匹配的查询以适合客户。即列出了基于客户使用MatchType(预栅栏)卖家名称这是我曾尝试:

select c.Fname, c.Lname, p.Name FROM customers c, Products p, Requests, sellers 
WHERE c.ID=sellers.cid AND p.ProductsID=sellers.productsid 

这将列出所有卖家的名称和产品,他们正在销售的名称。但是,我希望仅显示那些在请求表中的单词是EXACT的产品。只能匹配确切的数量。所以,我试过:

select c.Fname, c.Lname, p.Name FROM customers c, Products p, Requests, sellers 
WHERE c.ID=sellers.cid AND p.ProductsID=sellers.productsid 
AND Requests.productsid=sellers.productid AND Requests.matchType ='Exact' 

我试过这个,这不正确输出我想要的东西。我如何解决它我想我的输出是:

joe,bloggs,choclates 

所以这匹配requestid 1其中。然而我只是不能得到这个输出可以有人pelase帮助我吗?当然,通过与products.id匹配sellers.productsid将显示名称,然后通过匹配请求.productid与seller.productid WHERE requests.matchType ='确切'它应该工作吗?但它不显示我期望的输出。

+0

你给你想要的输出。你得到的输出是什么? – 2013-02-11 22:36:29

回答

0

当matchType确切时,request.Quantity = sellers.quantity。所以我想你的where子句应该是

WHERE c.ID=sellers.cid 
    AND p.ProductsID=sellers.productsid 
    AND Requests.productsid=sellers.productid 
    AND CASE WHEN Requests.matchType ='Exact' THEN sellers.quantity 
      ELSE -1 END = CASE WHEN Requests.matchType ='Exact' THEN Requests.quantity 
           ELSE -1 END 

OR

WHERE c.ID=sellers.cid 
    AND p.ProductsID=sellers.productsid 
    AND Requests.productsid=sellers.productid 
    AND ((Requests.matchType ='Exact' AND sellers.quantity = Requests.quantity) 
     OR Requests.matchType != 'Exact')