SQL查询匹配表(分配)

时间:2013-02-11 21:46:01

标签: sql phpmyadmin

好的,这是我的数据库摘录

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个产品(糖果和巧克力),请求表显示..请求[主键],产品ID,请求产品的客户ID,以克为单位的数量以及他们希望如何显示匹配项。 因此,如果我们接受第一个请求,它将如下所示... REquestID 1 [pk],想要chcolates(2),想要choclates的用户是john smith并且他想要200克价值与他的请求完全匹配。 .. 现在我们有一个卖家,即joe bloggs,以5.00英镑的价格出售200克的巧克力... 现在我遇到的问题是如何运行与此卖家匹配的查询到适当的客户。即根据客户匹配列出卖家名称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

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

1 个答案:

答案 0 :(得分:0)

当matchType完全匹配时,请求.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')