Вот так по условию
прекратить поиск
средствами SQL не выйдет. Однако можно нагородить подобную конструкцию, которая обойдётся за одно обращение к таблице (запрос писал на Oracle SQL, в других диалектах, я полагаю, есть что-то подобное):
select * from (
select t.*,
(case
when t.`a` = 1 and t.`b` = 2 and t.`c` = 3 then 0
when t.`a` = 1 and t.`b` = 2 then 1
when t.`a` = 1 then 2
end) as rnk,
min((case
when t.`a` = 1 and t.`b` = 2 and t.`c` = 3 then 0
when t.`a` = 1 and t.`b` = 2 then 1
when t.`a` = 1 then 2
end)) over () as min_rnk
from `table` t
where (t.`a` = 1 and t.`b` = 2 and t.`c` = 3)
or (t.`a` = 1 and t.`b` = 2)
or (t.`a` = 1)) ta
where ta.rnk = ta.min_rnk
Update: Как мне любезно подсказал Гугл, у Вас видимо MySQL :) Не знаю, насколько мой ответ будет полезен, но оставлю его тут.