2010-06-09 71 views
0

這是否需要聯盟?在聯合和布爾條件之間進行選擇

SELECT vend_id, prod_id, prod_price 
FROM products 
WHERE prod_price <= 5 
UNION 
SELECT vend_id, prod_id, prod_price 
FROM products 
WHERE vend_id IN (1001,1002); 

或者這樣做,如果你這樣做?

SELECT vend_id, prod_id, prod_price 
FROM products 
WHERE prod_price <= 5 
OR vend_id IN (1001,1002); 

回答

3

數據庫將爲這兩個查詢生成不同的執行計劃。沒有實際的性能問題,我會用更簡單的查詢。用union代替or可以使一個簡單的查詢適度複雜。但是這會讓複雜的查詢難以理解。

這兩個查詢之間也有細微的差異。數據庫將過濾掉第二個查詢的重複項(您正在使用union,而不是union all)。如果您對未選擇的列進行過濾,這可能會產生令人驚訝的效果。

0

是的,在這種情況下,它是一樣的。

-1

如果您的vend_id爲1001且價格低於5,那麼您將從第一個查詢中獲得兩行,而在第二個查詢中只獲取一行。

一般來說,第二種形式更好,因爲它更容易閱讀並且可能更快執行。

+3

你不會得到兩行,因爲'union'過濾掉重複(而不是'union all')。 – Andomar 2010-06-09 09:05:22

0

兩者都是在你的例子一樣

但第二個方法是更快聯盟將排序的結果集可能會很慢

相關問題