"Union" sqlite 中的"order by"和"limit"不起作用



我正在开发一个移动应用程序,并使用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

在复合查询中不允许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)

使用

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时

最新更新