如何将两个SELECT查询与自己的顺序组合在一起

时间:2013-06-20 14:17:27

标签: sqlite android-sqlite

我有两个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查询中这是可能的,那很好。我想要的是,只需按照上面的顺序将它们变成一个结果。

1 个答案:

答案 0 :(得分:4)

一般解决方案:使用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)都使用双引号来分隔区分大小写的标识符。