SQL选择搜索优先级

时间:2011-07-05 04:12:16

标签: sql-server select

我想知道是否有可能用搜索优先级编写一个SQL SELECT查询(我已经查看了典型的优先级,在OR之前的AND,但这并不是我想做的事情。)

以下是基本查询,它是整个查询的基础:

SELECT TOP 15 * FROM MyTable WHERE reference LIKE '123%' OR first_name LIKE 'Pa%';

P.S。引用不是PK,它只是一个与人相关的值

现在我希望有人可以帮助我的是,我希望它首先用匹配'123%'的那些填满前15名然后剩余的空间留下与那些匹配first_name'Pa的那些空间%”。如果我在我的代码中运行此查询,那么它将填充TOP 15与那些匹配'Pa%'的那些现在我假设它是因为它搜索数据库的方式(它在匹配之前找到15个匹配'Pa%'引用),有没有办法告诉查询首先在引用中查找'123%'然后当它找到或未找到任何值时在first_name中搜索'Pa%'或者我必须写入单独的查询并在那里合并结果

〜提前谢谢你:D

3 个答案:

答案 0 :(得分:1)

甚至更简单:

SELECT TOP 15 * 
FROM MyTable 
WHERE reference LIKE '123%' OR first_name LIKE 'Pa%'
ORDER BY reference LIKE '123%' DESC;

true自然会在false之后订购,所以只需按您想要的匹配排序+ DESC

答案 1 :(得分:0)

    SELECT TOP 15 * 
    FROM MyTable 
    WHERE reference LIKE '123%' OR first_name LIKE 'Pa%'
    ORDER BY 
        CASE WHEN reference LIKE '123%' THEN 1 
        WHEN first_name LIKE 'Pa%' THEN 2 END ASC

答案 2 :(得分:0)

您可以'按'搜索标准的数字投影

     SELECT TOP 15 * FROM MyTable WHERE reference LIKE '123%' OR first_name LIKE 'Pa%'
     order by case when reference LIKE '123%' then 100 else 0 end
             + case when first_name LIKE 'pa%' then 1 else 0 end

但它不是表演助推器;-)