Есть ли более простой способ сделать несколько вложенных IF в mysql? - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь написать хранимую процедуру в mysql, которая имеет 10 'in' параметров.

Проблема в том, что некоторые параметры могут быть нулевыми или иметь значение. В случае нуля он не должен пытаться искать этот столбец в части where. То же самое относится и к сортировке столбцов.

То, как у меня сейчас это выглядит, выглядит следующим образом:

if(par1 is null) then
  if(par2 is null) then
    if(par3 is null) then
      -- some query: select * from blabla where 1=1 order by something
    else
      -- other query: select * from blabla where col3=par3 order by something
  else
    if(par3 is null) then
      -- some query: select * from blabla where col2=par2 order by something
    else
      -- other query: select * from blabla where col2=par2 and col3=par3 order by something
else
  -- same as in the 'if' part

Так что, как вы видите, работать с ним очень быстро, сейчас Представьте, что это делается для многих параметров. Как я могу упростить это, если это возможно? Любой совет?

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете написать один запрос, который принимает все параметры одновременно и использует coalesce() для игнорирования null значений:

select * 
from blabla 
where 
        col1 = coalesce(@par1, col1)
    and col2 = coalesce(@par2, col2)
    and col3 = coalesce(@par3, col3)
order by something

Вы также пишете это как более длинный, но, возможно, более ясный:

select * 
from blabla 
where 
        (@par1 is null or col1 = @par1)
    and (@par2 is null or col2 = @par2)
    and (@par3 is null or col3 = @par3)
order by something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...