【问题标题】:How to combine two SELECT queries with their own order如何将两个 SELECT 查询与它们自己的顺序结合起来
【发布时间】:2013-06-20 14:17:26
【问题描述】:

我有两个 SELECT 查询。它们是自行排序的。我想把它们合二为一,同时不改变它们的顺序。

例如,第一个 SELECT 查询是这样的:

SELECT * FROM table WHERE name LIKE "Smith%" ORDER BY name

这会返回

name
--------
SmithABC
SmithBCD
SmithDEF

我还有另一个这样的 SELECT 查询:

SELECT * FROM table WHERE name LIKE "%Smith%" AND name NOT LIKE "Smith%" ORDER BY name

这个返回

name
--------
ABCSmithEF
DEFSmithGH
XYZSmithXY

期望的结果:

name
--------
SmithABC
SmithBCD
SmithDEF
ABCSmithEF
DEFSmithGH
XYZSmithXY

按这个顺序

如果这在一个带有一些复杂 ORDER BY 的 SELECT 查询中是可能的,那很好。我想要的是,只需按照上面的顺序将它们变成 one 结果。

【问题讨论】:

    标签: sqlite android-sqlite


    【解决方案1】:

    一般解决方案:使用UNION:

    SELECT table.*, 1 subquery FROM table 
    WHERE name LIKE 'Smith%'
    UNION ALL
    SELECT table.*, 2 subquery FROM table 
    WHERE name LIKE '%Smith%' AND name NOT LIKE 'Smith%'
    ORDER BY subquery, name
    

    为了保留select语句的顺序,可以引入一个人工列,先排序,再按name排序

    具体解决方案:使用更复杂的ORDER BY表达式:

    在您的示例中,由于您的谓词,这两个子查询实际上是互斥的。所以你也可以写

    SELECT * FROM table 
    WHERE name LIKE '%Smith%'
    ORDER BY CASE WHEN name LIKE 'Smith%' THEN 1 ELSE 2 END, name
    

    注意:

    虽然SQLite accepts double quotes " 作为字符串分隔符,但我强烈建议使用单引号',因为大多数数据库(包括SQLite)使用双引号来分隔区分大小写的标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-17
      • 2011-11-17
      • 2019-05-07
      • 2012-12-12
      • 2020-03-25
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多