Итак, у меня есть веб-приложение, которое позволяет пользователю вводить параметры в запросе для получения результатов, используя выражение, например, страна
:Country -- varchar type
:Grade -- int
У меня есть запрос, в котором я проверяю по оценке учащихся, если пользователирешает ввести параметр или нет.
Запрос 1
select count(distinct s.students),s.gradenumber
from student s
join blablabla
where (Case when length(:Grade)>0
then gradenumber = :Grade
else gradenumber between 1 and 12
END)
Так как я знаю, что школьный класс имеет ограничение от 1 до 12, я могу решить эту проблему таким способом
Проблема
Проблема с параметром (: Country) состоит в том, что если оставить его пустым, запрос не будет работать.Поэтому я пишу оператор case, чтобы игнорировать ввод пользователя, если он пуст, и продолжать работу с запросом
В приведенном ниже предложении where я проверяю ввод данных пользователя страны
SELECT l.longtext as language,count(distinct s.studentnr) as Studentcount
FROM student s
join pupil p on p.id = s.pupilid
join pupillanguage pl on pl.personid = p.id
join language l on l.id = pl.languageid
join pupilnationality pn on pn.personid = p.id
join country ctf on ctf.id = pn.countryid
where (CASE when LENGTH(:Land)<3 <----- focus on the where statement
then ctf.text = :Land
else ctf.text like '%'
END)
Это где утверждение дает мне 0 результатов. Должен ли я использовать coalesce?
where (CASE when LENGTH(:Land)<3
then ctf.text = :Land
else ctf.text like ....
END)