小编典典

SQLite LIKE&ORDER BY匹配查询

sql

我需要一个仅使用LIKE搜索1字段的SQLite查询。

基本示例:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;

问题是我希望以这种方式对结果进行排序:

  1. 如果字段相等(例如“ John”)
  2. 如果字段以“ John”开头(例如“ John Doe”)
  3. 如果字段包含“ John”(例如“ Jane John Doe”)

以下查询达到了预期的结果,但速度较慢:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John" 
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10;

上面的查询比使用3个单独的查询(一个用于完全匹配,一个用于以开头,一个用于包含)更慢(或者我测试不正确)。

还有其他选择吗?


阅读 332

收藏
2021-03-17

共1个答案

小编典典

以这种方式尝试:

SELECT name 
FROM table 
WHERE name LIKE "%John%" 
ORDER BY (CASE WHEN name = "John" THEN 1 WHEN name LIKE "John%" THEN 2 ELSE 3 END),name LIMIT 10 ;
2021-03-17