2015-11-20 194 views
-5

我一直在寻找一段时间,但我没有找到答案:这些查询之间有什么区别?SQL - 两个查询之间的差异

SELECT P1.att 
FROM table AS P1, table AS P2 
WHERE P2.att1=x AND P1.att2 > any P2.att2; 

SELECT att 
FROM table 
WHERE att2 > any (SELECT att2 FROM table WHERE att1=x); 

感谢的你

回答

0

唯一的区别是,第一个查询将返回一行在表,其中P1.att2 > P2.att2 and P2.att1 = x每一对行,而第二个查询将只返回一个排在每一行其中att2大于在某些行中att1 = x。例如,如果表中包含:

att att1 att2 
1 x 10 
2 y 20 
3 x 15 
4 z 16 
5 a  5 
6 b 11 

第一个查询将返回

att 
2 
2 
3 
4 
4 
6 

24返回两次,因为他们att2att2更大行1和3,但35只比第一行大。第二个auery将仅返回:

att 
2 
3 
4 
6 

如果att在每一行中都是唯一的,则将第一个查询更改为SELECT DISTINCT P1.att将使您获得与第一个查询中相同的结果。或者如果有主键,则可以使用GROUP BY primary_key_column