Я просто не могу найти решение для этого запроса хранимой процедуры.Сохраненная процедура - проблемы с запросом
У меня есть Person
и a Student
стол. В таблице Person
я храню значение bool isFootballPlayer
и Student
таблица имеет FK PersonId
, которая ссылается на таблицу Person
.
У меня есть веб-приложение, где есть функция поиска, которая включает флажок для Студента, Лица и Футболиста, чтобы отфильтровать результаты. Поэтому, когда выбрано только Лицо, оно вернет все, что не Игроков и учеников.
Моя хранимая процедура выглядит следующим образом:
"SP stuff"
@IncludePerson bit,
@IncludePlayer bit,
@IncludeStudent bit
AS
BEGIN
WITH i (Id)
SELECT
p.PersonId as Id
FROM
Person p
LEFT OUTER JOIN
Student s ON s.PersonId = p.PersonId
WHERE
(s.PersonId IS NULL OR @IncludeStudent = 1) AND
(p.IsFootballPlayer = 0 OR @IncludePlayer = 1) AND
((s.PersonId > 0) OR @IncludePerson = 1)
)
SELECT i.Id
FROM i
GROUP BY i.Id
END
Проблема здесь в том, что некоторые студенты также могут быть футболисты, и поэтому, когда только студент флажок установлен, то результат исключает студентов, которые также футболистов, если оба флажка не установлены.
Может ли кто-нибудь помочь мне в правильном направлении и дать мне несколько советов о том, как я могу изменить хранимую процедуру, чтобы показать студентам, которые также являются футболистами, без необходимости проверять оба флажка?
Благодаря
Можете ли вы объяснить немного больше, что хотите ли вы вернуться к каждой комбинации флажков? это неясно, что вы ожидаете, когда проверяется только футболист или когда флажок человека не проверяется вообще. или когда проверяется более одного флажка, как студенты и футболисты. –
Извините, что вы не очень точны. Ну, я ожидаю, что когда будет выбран только один флажок, результат будет только футболистом, человеком или учеником! Если все выбрано, это, естественно, вернет всех. Когда выбираются человек и студент f.ex, я хочу, чтобы футболисты были исключены, и то же самое было бы для любой другой комбинации; что неконтролируемый результат не закончится! Насколько я понимаю, ваш запрос будет работать, только если выбран флажок! –