Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite WHERE子句的逻辑以及>运算符和子查询_Sqlite - Fatal编程技术网

Sqlite WHERE子句的逻辑以及>运算符和子查询

Sqlite WHERE子句的逻辑以及>运算符和子查询,sqlite,Sqlite,我不明白下面查询3的逻辑,希望有人能给我一些想法。 对于查询3, 选择ID、姓名、年龄、年龄所在公司的薪资>从薪资从薪资从年龄所在公司选择ID、姓名、年龄、薪资>从薪资

我不明白下面查询3的逻辑,希望有人能给我一些想法。 对于查询3, 选择ID、姓名、年龄、年龄所在公司的薪资>从薪资<20000的公司选择年龄

子查询将首先找出薪资<20000的结果,这就是查询2显示的结果,如下所示。然后父查询将找出结果,其中使用了表COMPANYtotal中7条记录的所有年龄记录:18,19,22,23,24,29,37,与子查询Total中4条记录的年龄结果进行比较:18,19,23,29,然后根据年龄显示较大的记录

我希望结果应该只显示ID7,如下所示,因为只有这个记录满足条件。子查询查询2的结果中较大的年龄为29岁,因此只有该记录的年龄大于29岁

不幸的是,我的期望没有得到满足,它向我显示了查询3的结果,如下所示

我希望了解查询3的逻辑工作原理,并希望有人能提供帮助

1.sqlite>选择ID、姓名、年龄、公司薪资

2.sqlite>从薪资<20000的公司选择ID、姓名、年龄、薪资

3.sqlite>从年龄所在公司选择ID、姓名、年龄、薪资>从薪资<20000的公司选择年龄


猜测一下,因为它不会抛出一个似乎更好的错误;另见第32栏的评论:

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

重新排列或创建另一组数据,看看您现在从查询2和查询3得到的结果是否与此假设一致


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

子查询应该只返回一行;将一个聚合函数放入其中,从中选择MINAGE。。。或者任何合适的。如果用作表达式的子选择返回多行,IIRC SQLite应该出错。。。
ID          NAME        AGE         SALARY  
7           Vicky       37          32500.0 
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   
ID          NAME        AGE         SALARY  
3           Kenny       19          9700.0    
4           Henry       23          13555.0   
5           Sam         18          17000.0   
6           Ray         29          8000.0    
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