我没有得到如下查询3的逻辑,希望有人能给我一些想法。 对于查询3, SELECT ID,NAME,AGE,SALARY FROM COMPANY AGERE AGE> (从公司所在地选择年龄< 20000);
子查询会找出薪水<先20000,这就是query2如下所示。然后父查询将找出结果,使用表COMPANY中的所有年龄记录(共7条记录:18,19,22,23,24,29,37)与年龄进行比较&# 39;来自子查询的结果(总共4条记录:18,19,23,29),然后根据年龄显示更大的记录。
我希望结果只能显示ID 7,如下所示,因为只有这条记录符合条件。子查询(查询2)的结果年龄为29岁,因此只有此记录的年龄超过29岁。
ID NAME AGE SALARY
7 Vicky 37 32500.0
不幸的是我的期望没有得到满足,它向我展示了如下查询3的结果。
我希望理解查询3的工作原理,并希望有人可以提供协助。
1.sqlite> SELECT ID,NAME,AGE,SALARY FROM COMPANY;
ID NAME AGE SALARY
1 John 24 21000.0
2 Davy 22 20000.0
3 Kenny 19 9700.0
4 Henry 23 13555.0
5 Sam 18 17000.0
6 Ray 29 8000.0
7 Vicky 37 32500.0
2.sqlite>来自公司的SELECT ID,NAME,AGE,SALARY SALERE< 20000;
ID NAME AGE SALARY
3 Kenny 19 9700.0
4 Henry 23 13555.0
5 Sam 18 17000.0
6 Ray 29 8000.0
3.sqlite> SELECT ID,NAME,AGE,SALARY FROM COMPANY AGERE AGE> (从公司所在地选择年龄< 20000);
ID NAME AGE SALARY
1 John 24 21000.0
2 Davy 22 20000.0
4 Henry 23 13555.0
6 Ray 29 8000.0
7 Vicky 37 32500.0
答案 0 :(得分:0)
猜测,因为它没有抛出错误(这似乎是一个更好的主意;另见Col. 32的评论):
Sqlite只选择第一个返回的年龄。那个年龄应该是随机的,但是按照你的查询2中显示的结果并假设一些一致性,第一个结果可能是19.然后,它选择所有大于19的年龄,这是你在查询3的结果中看到的。
随机播放或创建另一组数据,看看你现在从查询2和3获得的内容是否与此假设一致。
其他人可能知道Sqlite的内部结构足以解释为什么会发生这种情况。