<任何,< all在mysql中给出相同的结果

时间:2013-04-28 14:06:05

标签: mysql sql

enter image description here

当我使用此查询时

mysql> select movieid from rating where stars < any (select stars from rating where 

movieid=103);

输出如下

movieid 

 101 
 108    
 104 

当我执行以下查询时,结果似乎是一样的。这是为什么?

> mysql> select movieid,stars from rating where stars <all (select stars
> from rating where movieid=103);

+---------+-------+
| movieid | stars |
+---------+-------+
|     101 |     2 |
|     108 |     2 |
|     104 |     2 |
+---------+-------+

all关键字不应该将小于的结果返回给星号2吗?在这种情况下,它将是一个空集。

这是一个捕获

enter image description here

2 个答案:

答案 0 :(得分:1)

捕获中的数据与您之前发布的数据不同,对于movieid = 103(而不是3和2)的两行,您有3颗星。

至于您提供的第一个数据:

使用“any”的第一个查询等同于:

select movieid from rating where stars < 2 OR stars < 3

结果是:

101
103
108
104

第二个查询相当于:

select movieid from rating where stars < 2 AND stars < 3

,结果是空集。

对于截屏数据:

两个查询都相当于:

select movieid from rating where stars < 3

结果是:

101
108
104

答案 1 :(得分:0)

我不知道,但如果我写这篇文章,我会做类似的事情:

/* is this what you want by "any" */
select movieid,stars from rating where stars < (select max(stars) from rating where movieid=103);

/* is this what you want by "all" */
select movieid,stars from rating where stars < (select min(stars) from rating where movieid=103);

demo