2016-12-14 195 views
-1

有人可以幫助優化笛卡爾乘積,因爲它需要大量的時間來執行:SQL:避免笛卡爾乘積的usauge

select c_msg.gft_id, 
     a_msg.pkSize 
from Gifts c_msg, 
     (select giftContId, 
       count(*) pkSize 
     from  Gifts gft 
     GROUP BY gft.giftContId) a_msg 
where sentDate between (sysdate-10) and (sysdate-1) 
and a_msg.giftContId = c_msg.giftContId 
order by a_msg.giftId; 
+1

顯而易見的解決方案是使用'ON'子句添加連接條件。話雖如此,有什麼辦法可以加入這兩張表? –

+1

這沒有多大意義。 Gifts.giftId不是唯一的嗎?你打算使用另一張桌子嗎?和pkgSize,它代表什麼? –

+2

請編輯你的問題,並添加表結構的信息什麼是唯一標識符。 – Kacper

回答

3

我不知道這個工程上的Oracle。在postgresql中,你可以這樣做:

SELECT gft_id, count(*) over (partition by giftContId) as pkSize 
FROM Gifts 
WHERE sentDate between (sysdate-10) and (sysdate-1) 
ORDER BY giftId; 
+1

是的,它是Oracle的正確語法,它看起來像查詢做OP所需要的。 – Kacper