我有两个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查询中这是可能的,那很好。我想要的是,只需按照上面的顺序将它们变成一个结果。
答案 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)都使用双引号来分隔区分大小写的标识符。