Привет! Необходимо решить такую задачу.
Имеется четыре таблицы: person, profession, qualification, organization. Последние три таблицы связаны с первой как "много ко многим" при помощи доп. таблиц (person2profession, person2qualification, person2organization). Стоит задача написать хранимую процедуру которая будет принимать три параметра: @ProfessionID, @QualificationID, @OrganizationID. Каждый параметр может содержать либо значение ключевого поля соответствующей таблицы либо НОЛЬ. В процедуре нужно выбрать значения из person, отфильтрованные по полям ProfessionID, QualificationID, OrganizationID из соотв. таблиц. Что-то вроде:
SELECT * FROM person
INNER JOIN person2profession ON person2profession.personID = person.personID
INNER JOIN person2qualification ON person2qualification .personID = person.personID
INNER JOIN person2organization ON person2organization .personID = person.personID
WHERE person2profession.professionID = @ProfessionID
AND person2qualification.qualificationID = @QualificationID
AND person2organization.organizationID = @OrganizationID
Но вся проблема в том, что когда какой-то параметр процедуры (@ProfessionID, @QualificationID, @OrganizationID) принимает нулевое значения, он не должен участвовать в фильтрации. Помогите пожалуста докумекать как это грамотно реализовать (конечно же на первом месте производительность процедуры).
Спасибо.
Здравствуйте, Gudzik, Вы писали:
[]
G>Но вся проблема в том, что когда какой-то параметр процедуры (@ProfessionID, @QualificationID, @OrganizationID) принимает нулевое значения, он не должен участвовать в фильтрации.
Никакой проблемы, просто добавляешь выделенное жирным:
WHERE ( @ProfessionID=0 OR person2profession.professionID = @ProfessionID )
Ноль равен нулю, так? Если передашь ноль — второе условие (после OR) не отработает.
З.Ы. Скобки не забудь.
... << RSDN@Home 1.1.4 beta 7 rev. 452>>
Здравствуйте, Flamer, Вы писали:
F>Никакой проблемы, просто добавляешь выделенное жирным:
F>F>WHERE ( @ProfessionID=0 OR person2profession.professionID = @ProfessionID )
F>
Все гениальное — просто
. Спасибо, это то что нужно!