Я получаю сообщение об ошибке:
the multi-part identifier "IC.industry" could not be bound
при выполнении этого запроса SQL со страницы JSP через JDBC:
select C.company, C.shname, C.fullname, count(d_to_c.designer)
from companies C
left join ind_to_c IC on C.company = IC.company
left join d_to_c on C.company= d_to_c.company
where IC.industry = ?
group by C.company, C.shname, C.fullname
order by C.shname
и я пытаюсь запустить его как подготовленный оператор, где я устанавливаю параметр с помощью (например) stmt.setObject(1, 7)
перед запуском stmt.executeQuery()
.
Теперь, что странно: если я выполню это с ?
и установлю параметр, как я только что упомянул, я получу ошибку «не удалось связать». Однако если я просто изменю запрос и жестко закодирую число 7 в текст запроса, это сработает!
Так что что-то связано с привязкой этого параметра.
Но я не могу понять, что.
Кто-нибудь?
ОБНОВЛЕНИЕ : По запросу, определение таблицы для ind_to_c
:
industry - int(11)
company - int(11)
(это просто таблица, которая определяет отношения m2m между отраслями и компаниями)
ОБНОВЛЕНИЕ 2 : Также по запросу полный код JSP. Мне пришлось извлечь это из обращения к абстракции соединения с базой данных (которую мы используем для хранения подготовленных операторов и т. Д.
// conn был инициализирован как объект соединения с БД.
int parent_id = 7;
PreparedStatement ps = conn.prepareStatement("select C.company, C.shname, C.fullname, count(d_to_c.designer) from companies C left join ind_to_c IC on C.company = IC.company left join d_to_c on C.company = d_to_c.company where IC.industry = ? group by C.company, C.shname, C.fullname order by C.shname");
ps.setObject(1, parent_id);
ResultSet rs = null;
rs = ps.executeQuery();