Выполнить другой блок, если в блоке 1 не найдено записей - PullRequest
0 голосов
/ 03 июля 2019

У меня есть один блок выполнения SQL-запроса с условием ниже.

В первом запросе мы добавляем условие, как показано ниже.

Declare  @maxprice int 
Declare  @minprice int 

Запрос 1

Select * FROM Mobiles where value between @maxprice and @minprice and column2= @otherparam 

если в указанном запросе не найдено записей, то я хочу выполнить запрос с некоторыми изменениями в запросе 2.

Запрос 2

Select * FROM Mobiles where value between @maxprice - 1000 and @minprice - 1000 and column2= @otherparam 

в соответствии с вышеуказанным условием, если мобильный телефон не найден для определенного диапазона даттогда я хочу уменьшить максимальную и минимальную сумму на 1000 RS.

для ie @maxprice = 10000 & @minprice = 8000, если не найдено записей, как указано выше, тогда я хочу изменить параметр и выполнить запрос снова,

SET @maxprice = 9000
SET @minprice = 7000 

В настоящее время я выполняю Запрос 1и если найдено 0 записей, я выполняю запрос2

Пожалуйста, подскажите, как этого добиться с минимальным выполнением.

Ответы [ 3 ]

1 голос
/ 03 июля 2019

Вы можете использовать CTE для первого запроса и UNION ALL для второго:

with cte as (
  Select * FROM Mobiles 
  where value between @maxprice and @minprice and column2= @otherparam 
)
Select * from cte
union all
Select * FROM Mobiles 
where value between @maxprice - 1000 and @minprice - 1000 and column2= @otherparam 
      and not exists (select 1 from cte) 
0 голосов
/ 03 июля 2019

Попробуйте использовать временную таблицу.Загрузить результат запроса 1 в темп.Если у temp нет данных, загрузите результат запроса 2 в temp.Показать данные с темпом

Declare  @maxprice int 
Declare  @minprice int 
create table #tmpMobiles (/*... your structue of data*/)

insert into #tmpMobiles
Select * FROM Mobiles where value between @maxprice and @minprice and column2= @otherparam 

if not exists(select top 1 * from #tmpMobiles) begin
    set @maxprice = @maxprice - 1000
    set @minprice = @minprice - 1000

    insert into #tmpMobiles
    Select * FROM Mobiles where value between @maxprice and @minprice and column2= @otherparam 
end

select * from #tmpMobiles
0 голосов
/ 03 июля 2019

Если вы хотите только одну строку:

select top (1) m.* 
from Mobile
where value between @minprice - 1000 and @maxprice and
      column2 = @otherparam 
order by value desc

Для производительности вам нужен индекс на mobile(column2, value).

Примечание: порядок операндов для between очень важен. Меньшее значение должно быть вторым операндом, а большее - последним.

...