sql - 在 sqlite SQL 语句中结合 order by 子句使用限制

标签 sql sqlite

下面两条SQL语句是否总是产生相同的结果集?

 1. SELECT * FROM MyTable where Status='0' order by StartTime asc limit 10

 2. SELECT * FROM (SELECT * FROM MyTable where Status='0' order by StartTime asc) limit 10

最佳答案

是的,但是对子查询进行排序可能是一个不好养成的习惯。您可以在第二个示例的子查询之外进一步添加 ORDER BY ,例如

SELECT * 
FROM (SELECT * 
      FROM Test
      ORDER BY ID ASC
     ) AS A
ORDER BY ID DESC
LIMIT 10;

SQLite 仍然在内部查询中执行 ORDER BY,然后在外部查询中再次对它们进行排序。不必要的资源浪费。

我做了一个 SQL Fiddle进行演示,以便您可以查看每个的执行计划。

关于sql - 在 sqlite SQL 语句中结合 order by 子句使用限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429738/

相关文章:

java - 类似 Hibernate 的多对多集合查询

mysql - 我需要在此 SQL 指令中添加什么来过滤某些项目?

sql - 性能:SQL 与 Post

c++ - 无法链接到 SQLite3 静态库

sql - 将同一列和表中具有相似值和总和值的行组合起来

mysql - 关于连接表的 SQL

javascript - SQL 删除未按预期工作

php - SQL准备语句execute()错误

android - 关还是不关?

python - 在python代码中访问在django中创建的表时出错