как сделать условно где в sql? - PullRequest
0 голосов
/ 13 сентября 2018

у меня есть таблица, которую я не могу изменить, которая имеет следующую структуру

requests_table

ID   PROCESS_ID   STATUS      DATE
1        1           -1       2002
2        2            1       2003
3        2            4       2004
4        3            5       2005
5        3            14      2005
6        1            15      2006

и process_id является ключом к proccess_table что

process_id    process_name
   1               a
   2               b        
   3               c 

и у меня есть входной параметр: processID

что я хочу

if the paramter  = 5 

then return records that have STATUS 14 or 15 only

else
  if 
the paramter is null 
then return all records

else if the paramter has any value except 5 , apply this condition

where :processID = requests_table.PROCESS_ID   

как этого добиться? Я не могу вставить новые записи в таблицы

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я бы предложил использовать все, что вызывает SQL (например, PHP), для переключения между различными операторами SQL, например

if(processID==5){
    query="SELECT * FROM requests_table WHERE STATUS=14 OR STATUS=15"
} else if (processID==null){
    query="SELECT * FROM requests_table"
} else {
    query="SELECT * FROM requests_table WHERE PROCESS_ID=processID"
}

, а затем выполнить выбранный запрос.

если вы хотите, чтобы все это было в одном операторе SQL, вы можете сделать

SELECT * FROM requests_table WHERE (processID=5 AND (STATUS=14 OR STATUS=15)) OR processID NULL OR PROCESS_ID=processID
0 голосов
/ 13 сентября 2018

Вы можете сделать это в одном выражении как:

SELECT *
FROM requests_table
WHERE (:processID = 5 AND STATUS IN (14, 15)) OR
      (:processID = processId) OR
      (:processID IS NULL);
0 голосов
/ 13 сентября 2018

вы можете использовать EXECUTE IMMEDIATE Query, определить переменную varchar и установить свой запрос в нее, после этого проверить свои параметры и установить параметры запроса, посмотрите на этот пример:

declare   
  myQuery   varchar(500) ;   
  parameter number := 5;   
begin   
  myQuery := ' select * from requests_table ';   

  if parameter = 5 then   
    myQuery := myQuery || ' where (status=14 OR status=15) ' ;   
  end if;    

  EXECUTE IMMEDIATE myQuery;   
end;    
end;    

параметр - это ваше значение, которое вы хотитеперейти к этому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...