sqlite中“order by”和“limit”的“联盟”不起作用

时间:2014-03-24 11:40:13

标签: javascript sqlite

我正在开发一个移动应用程序,并使用SQLITE将用于离线使用的数据存储到本地数据库中。 为了使我的本地数据库与远程数据库同步,我正在查询最后10个收藏夹和最后10个匹配项。使用以下查询:

select user_id from users where is_favorite>0 order by is_favorite desc limit 10
 union
select user_id from users where is_auto_match>0 order by is_match desc limit 10

请注意,以下查询工作正常,这确认我的本地数据库中没有错误:

select user_id from users where is_favorite>0
     union
select user_id from users where is_auto_match>0

2 个答案:

答案 0 :(得分:1)

复合查询中不允许使用ORDER BY;允许它的唯一位置是在整个查询的末尾,它会影响所有记录。

为了能够对两个单独的查询使用ORDER BY,您必须使用子查询:

SELECT *
FROM (SELECT user_id
      FROM users
      WHERE is_favorite > 0
      ORDER BY is_favorite DESC
      LIMIT 10)
UNION ALL
SELECT *
FROM (SELECT user_id
      FROM users
      WHERE is_auto_match > 0
      ORDER BY is_match DESC
      LIMIT 10)

答案 1 :(得分:0)

使用

Select * From(select user_id from users where is_favorite>0 order by is_favorite desc limit 10)
UNION ALL
Select * From(select user_id from users where is_auto_match>0 order by is_match desc limit 10)

注意使用UNION ALL: UNION ALL为重复的user_id提供结果 而UNION从结果中删除重复的user_id