bigton
@bigton
Web-программист

Как прекратить поиск при выполнении одного из условий?

Всем привет!

Выполняю первый запрос:
SELECT * FROM `table` WHERE `a` = 1 AND `b` = 2 AND `c` = 3
Если первый запрос не вернул значений, то выполняю второй запрос:
SELECT * FROM `table` WHERE `a` = 1 AND `b` = 2
Если второй запрос не вернул значений, то выполняю третий запрос:
SELECT * FROM `table` WHERE `a` = 1

Можно ли реализовать подобное одним запросом?

SELECT * FROM `table` WHERE 
IF (`a` = 1 AND `b` = 2 AND `c` = 3) // вернуть значения, прекратить поиск
ELSE IF ( `a` = 1 AND `b` = 2) // вернуть значения, прекратить поиск
ELSE IF (`a` = 1) // вернуть значения, прекратить поиск

Спасибо за ответы!
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 2
Вот так по условию
прекратить поиск
средствами 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 :) Не знаю, насколько мой ответ будет полезен, но оставлю его тут.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
В принципе
select top 1 - если нужен какой-то результат
if exists - если нужен сам факт наличия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы