我一直在寻找,但我没有找到答案:这些查询之间有什么区别?
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 :(得分:0)
唯一的区别是第一个查询将为表P1.att2 > P2.att2 and P2.att1 = x
中的每对行返回一行,而第二个查询将为表中{(1}}的每一行返回一行}大于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
在行1和行3中大于att2
,但是att2
和3
只比第1行大。第二个auery将返回:
5
如果att
2
3
4
6
在每行中都是唯一的,则将第一个查询更改为att
将获得与第一个查询中相同的结果。或者,如果有主键,则可以使用SELECT DISTINCT P1.att
。