2011-07-05 208 views
1

我想知道是否有可能与写优先搜索(我已经看过了典型的优先级,然后再计算OR等,但并不做什么,我希望它做的)一个SQL SELECT查询。SQL选择搜索优先

下面是一个基本的查询是整个查询依据:

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

附:参考不是PK,它只是一个与人相关的价值

现在我希望有人可以帮助我,我希望它首先填补与'123%'相匹配的前15名,然后那些与名字'Pa%'相匹配的人留下了什么空间。如果我在我的代码运行此查询它填补了TOP 15与匹配“霸%”,现在我假定这是因为它搜索通过数据库的方式(它找到15场比赛,“霸%”它匹配之前参考),那么有没有办法告诉查询到基准首先寻找“123%”,那么它的发现或没有时所发现的任何值FIRST_NAME搜索“霸%”或者我会写信给单独的查询和合并有结果如何?

〜谢谢你在前进:d

+0

@OP订单? – Nishant

+0

我相信你问的是,它是:Microsoft SQL Server的 – Heinrich

回答

1

或更简单:

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

truefalse后自然的订单,所以只是..这DBMS你想要的比赛+ DESC

+0

嗯......你不能在SQL Server中使用布尔表达式这样。你将不得不使用CASE。 –

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 
0

可以 'ORDER BY' 你一个数字投影搜索条件

 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 

,但它不是一个性能助推器;-)