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:连接两个select语句_Sql_Sqlite - Fatal编程技术网

SQLite:连接两个select语句

SQLite:连接两个select语句,sql,sqlite,Sql,Sqlite,我有两个select语句,我正在寻找将它们合并为一个语句的方法。谢谢你的帮助和建议 Original: 1 2 3 4 5 6 Sql: Select * From (Select * From tbl1 Where Id < 4 Order By Id Desc Limit 1) Order By Id; Select * From tbl1 Where Id >= 4 Order By Id; Result: 3 4 5 6 看起来你需要一个新的 仅当两条语句的结果具有相同

我有两个select语句,我正在寻找将它们合并为一个语句的方法。谢谢你的帮助和建议

Original:
1
2
3
4
5
6

Sql:
Select * From (Select * From tbl1 Where Id < 4 Order By Id Desc Limit 1) Order By Id;
Select * From tbl1 Where Id >= 4 Order By Id;

Result:
3
4
5
6

看起来你需要一个新的


仅当两条语句的结果具有相同的列计数和类型时才有效。

使用此选项有什么意义:

Select * From (Select * From tbl1 Where Id < 4 Order By Id Desc Limit 1) Order By Id;
您的第一个查询可以看作是一个完整的表。同样,您的第二个查询也可以被视为另一个表

然后,使用SQL运算符联合,您可以得到一个组合结果集,将这两个“表”连接起来

有关详细信息,请浏览以下链接:

UNION ALL将更有效。@这取决于所需的结果。UNION ALL包含重复项。OP似乎不希望有这样的结果。@CL你说得对。在这种情况下,结果本身是相互排斥的。UNION ALL将给出相同的结果,而无需进行重复检查。如果绩效不是一个大问题,我还是更喜欢UNION,因为它表达了声明的意图,而没有做出假设。在我看来,这将是可读性和可维护性更好的代码。你仍然有一个正确的观点:-谢谢你的答案和教程链接。你能告诉我Kirill Nay给出的有无联合答案的区别吗?澄清一下:Kirill的查询不在MySQL中运行。MySQL 5.6.17不支持带IN的查询以及有限制的子查询。由于我使用的是MySQL,我很难将我的查询与Kirill的查询进行任何比较。抱歉我之前的评论。我不明白你为什么说抱歉。无论如何,正如我所说的,查询是针对SQLite的。我想知道的是,在性能和最佳实践方面,一个是否优于另一个。在性能方面,我想没有联合的查询更好。就实践而言,这是迄今为止最简单和最推荐的方法。
Select * From (Select * From tbl1 Where Id < 4 Order By Id Desc Limit 1) Order By Id;
Select * From tbl1 Where Id < 4 Order By Id Desc Limit 1
(SELECT * FROM tbl1 WHERE Id < 4 ORDER BY Id DESC LIMIT 1)
UNION
(SELECT * FROM tbl1 WHERE Id >= 4 ORDER BY Id ASC)
ORDER BY Id