Sqlite WHERE子句的逻辑以及>运算符和子查询
我不明白下面查询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的公司选择年龄Sqlite WHERE子句的逻辑以及>运算符和子查询,sqlite,Sqlite,我不明白下面查询3的逻辑,希望有人能给我一些想法。 对于查询3, 选择ID、姓名、年龄、年龄所在公司的薪资>从薪资从薪资从年龄所在公司选择ID、姓名、年龄、薪资>从薪资
猜测一下,因为它不会抛出一个似乎更好的错误;另见第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