gpt4 book ai didi

sqlite - 如何将两个SELECT查询按自己的顺序组合

转载 作者:行者123 更新时间:2023-12-03 15:11:33 26 4
gpt4 key购买 nike

我有两个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查询中可以做到这一点,那就很好。我想要的是,按上述顺序将它们变成一个结果。

最佳答案

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

关于sqlite - 如何将两个SELECT查询按自己的顺序组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com