2012-05-09 87 views
1

首先,我想扔掉我仍然很新的SQL。構建查詢的最佳方法?

考慮你有一個列x和y的表,其中兩個都是正整數。

問題1:

什麼是發現如果指定yi存在的所有x值的最佳方式是什麼?

問題2:

什麼是發現如果指定yi存在一組大小爲p x值的每個x的最佳方式?

我發現了一種方法,我可以在第一種情況下進行n次自連接,或者在第二種情況下進行p自連接。但我很好奇的更好的方法來實現這一點。

一個例子表:

x,y 
--- 
1,a 
1,b 
2,a 
3,b 
3,c 
+0

你試過什麼查詢? – Taryn

回答

1

你的懷疑是正確的:使用堆的加入是非常低效的
這裏的有效途徑:

問題1:這兩個值將是相同的,如果前提是真正

select 
    (select count(distinct x) from t1 where y = '1') as x_count_with_y, 
    (select count(distinct x) from t1) as x_count 

問題2:此值將是相同的x的集合中的數如果前提爲真

select count(distinct x) 
from t1 
where y = '1' 
and x in (1,2,3,5,8) 
+0

謝謝!我覺得必須有更好的方法。 – user1385222