当我使用此查询时
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吗?在这种情况下,它将是一个空集。
这是一个捕获
答案 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);