Последняя часть вашего запроса:
... AND terms.term_year_id IS NOT ?
Если задан параметр 100
, он будет расширен как:
... AND terms.term_year_id IS NOT 100
Это недопустимый SQL: IS
isне сравнивать значение с числом, для этого вам нужно использовать оператор равенства (in).Вы, вероятно, хотите:
... AND terms.term_year_id <> ?
В более общем смысле: в большинстве СУБД IS
используется только в сочетании с NULL
(либо IS NULL
, либо IS NOT NULL
).Таким образом, в основном этот тип параметризованных выражений может использоваться только с параметром NULL
(то есть СУБД вызовет ошибку, если будет передано другое значение):
term_standards.id IS ?
term_standards.term_id IS NOT ?
В зависимости от вашей цели, либо вы не надетывам не нужно использовать параметры (укажите ?
явно NULL
в вашем запросе), или вы можете захотеть изменить свой запрос.