2010-06-09 40 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

两者都是在你的例子一样

但第二个方法是更快联盟将排序的结果集可能会很慢

相关问题