Mysql SQL-两个查询之间的差异

Mysql SQL-两个查询之间的差异,mysql,sql,Mysql,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); 谢谢唯一的区别是,第一个查询将为表中的每一对行返回一行,其中P1.att2>P2.

我已经寻找了一段时间,但我没有找到答案:这些查询之间有什么区别

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);

谢谢

唯一的区别是,第一个查询将为表中的每一对行返回一行,其中
P1.att2>P2.att2和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
2
4
返回两次,因为它们的
att2
在第1行和第3行大于
att2
,但
3
5
仅大于第1行。第二个auery将返回:

att
2
3
4
6
如果
att
在每一行中都是唯一的,那么将第一个查询更改为
selectdistinct P1.att
将得到与第一个查询相同的结果。或者,如果有主键,您可以使用
按主键分组列