SQLite中获取两张学生表前10高分的SQL语句问题排查
解决SQLite两张表取成绩前10记录的问题
原SQL的问题点
- 表名带空格(
Table 1、Table 2),SQLite中需用双引号包裹,否则会出现识别错误或报错 - 子查询仅选择了
name和SCORES,所以最终结果只能拿到这两列;若需要Gender等其他列,必须在子查询中明确指定 - 子查询内的
ORDER BY无效,UNION ALL会合并两个结果集,最终排序要在外层执行,子查询的排序对最终结果没有影响
修正后的SQL代码
情况1:仅需要姓名和成绩列
sql = ("SELECT name, SCORES FROM (" "SELECT name, SCORES FROM \"Table 1\" WHERE SCORES > 0 " "UNION ALL " "SELECT name, SCORES FROM \"Table 2\" WHERE SCORES > 0" ") combined " "ORDER BY SCORES DESC LIMIT 10")
情况2:需要所有列(姓名、性别、成绩)
sql = ("SELECT * FROM (" "SELECT name, Gender, SCORES FROM \"Table 1\" WHERE SCORES > 0 " "UNION ALL " "SELECT name, Gender, SCORES FROM \"Table 2\" WHERE SCORES > 0" ") combined " "ORDER BY SCORES DESC LIMIT 10")
样本数据验证
用你提供的样本数据执行第二种SQL,会得到如下结果:
| name | Gender | SCORES |
|---|---|---|
| Judy | Female | 4500 |
| Cindy | Female | 3500 |
| Robert | Male | 1600 |
| Steve | Male | 1200 |
完全符合按成绩降序取前N条的需求。
内容的提问来源于stack exchange,提问作者rhoops
相关产品推荐
相关产品推荐

