我有一個與元組和關係微積分相關的問題。SQL和元組至少2個
我想知道是否有辦法在元組中聲明「至少2個」語句。它可以用SQL編寫,因爲元組和SQL有相似的語法。
首先,讓我們asume的模型爲:
提供商(1)------(*)令//甲提供商許多訂單,訂單屬於一個提供商
文章(1)-------(*)訂單//一篇文章屬於很多訂單,每個訂單都是一篇文章。
- 提供具有(ID_Prov)
- 文章有(ID_Art)
- 訂單(ID_Prov,ID_Art)
和查詢解決的是:
獲取所有提供ID的ID!= 5的PROVIDERS 至少有兩個通過與ID移動電話運營商提供的文章= 5
的問題是,在SQL有工具,如HAVING,GROUP BY,DISTINCT和COUNT這將使這個一樣容易:
SELECT O1.ID_PROV FROM ORDER O1 JOIN ORDER O2 ON
O1.ID_ART = O2.ID_ART
WHERE O1.ID_PROV != 5 AND O2.ID_PROV = 5
GROUP BY O1.ID_PROV
HAVING COUNT(DISTINCT O1.ID_ART) > 1;
但是在使用元組的關係演算中,沒有這樣的工具。所以這可以被解釋爲試圖爲「至少兩個」創建SQL,而不使用COUNT,HAVING,DISTINCT和GROUP BY; 只是加入,選擇和地點。
我已經做了幾次嘗試,但在某些細節上失敗了。
我最親密的嘗試是:
SELECT O3.ID_PROV FROM ORDER O1, ORDER O2, ORDER O3 WHERE
O1.ID_PROV = 5
AND O2.ID_PROV != 5
AND O3.ID_PROV != 5
AND O1.ID_ART = O2.ID_ART
AND O1.ID_ART = O3.ID_ART
AND O2.ID_PROV = O3.ID_PROV;
的問題,這就是:
讓我們說這是訂單表:
ID_PROV ...... ID_ART
5 ......................... 1
5 ................. ....... 2
1 ......................... 1
1 .............. ............ 1
3 ......................... 1
3 .. ....................... 2
我的嘗試將計算Provider-1作爲結果。即使他只交付了其中的一篇文章,因爲他交付了兩次。 正確地說,它也會返回provider-3。
感謝您的幫助,對於長度感到抱歉,我試圖儘可能清楚。
so..only'3'應該是針對每個樣本數據查詢的結果嗎? –
是的,在這個例子中只有3個應該是答案。 –