WHERE子句的逻辑与>运算符和子查询

时间:2015-10-01 02:57:54

标签: sqlite

我没有得到如下查询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   

1 个答案:

答案 0 :(得分:0)

猜测,因为它没有抛出错误(这似乎是一个更好的主意;另见Col. 32的评论):

Sqlite只选择第一个返回的年龄。那个年龄应该是随机的,但是按照你的查询2中显示的结果并假设一些一致性,第一个结果可能是19.然后,它选择所有大于19的年龄,这是你在查询3的结果中看到的。

随机播放或创建另一组数据,看看你现在从查询2和3获得的内容是否与此假设一致。

其他人可能知道Sqlite的内部结构足以解释为什么会发生这种情况。