2012-10-10 78 views
2

我想寫以下問題作爲關係代數:對於具有價格更低的替代產品的所有產品多關係代數加入

PNR和PNAME。

我的關係是這些:

Product(Pnr, Pname, Price) //Product info 
Substprod(Pnr, Subst-Pnr) //Product which can replace other products 

如果我在SQL這樣做會是這個樣子:

SELECT p.pnr, p.pname 
FROM Product p1, Substprod s, Product p2 
WHERE p1.pnr = s.pnr 
AND s.subst_pnr = p2.pnr 
AND p1.price > p2.price 

但我不知道怎樣才能得到相同的導致關係代數。我猜想我也需要在這裏進行三方加入,但是在特定產品的一個價格應低於其替代品的情況下遇到問題。

+0

Eequi-joins是最常見的類型連接,但連接的條件不一定是平等的。它可以是任何東西,總稱是「theta-join」(「θ-join」)。參見[維基百科加入頁面](http://en.wikipedia.org/wiki/Relational_algebra) –

回答

2

也許這樣的事情?在確切的語法上有點生疏,但總的想法就在那裏。

T1 <- ρ pris = substpris (Product ⨝ Substprod) 
T2 <- σ price > substprice (T1 ⨝ Product) 
T3 <- π pnr,name (T2) 
+0

許多年後,我仍然找到最好的答案! –