2013-02-11 141 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')