Я пишу sql-запрос для подсчета объектов. У меня около 50 предварительно написанных запросов, и каждый из них по существу написан так:
"select count(1) from SOME_TABLE where identifier = :ID"
У меня это на Java. SOME_TABLE уже записано в запрос (по-разному для каждого запроса). Во время выполнения коммутатор/случай определяет, какой запрос выполнить и какой идентификатор должен отправить.
По сути, существуют различные запросы, которые можно вызвать, но идентификатор - это единственное, что изменяется внутри запросов.
Итак, если я хочу подсчитать все пинтеры в лесу, я бы послал pineTree в качестве идентификатора в запрос, который учитывает Tree. Достаточно просто. Как я уже упоминал, есть гигантский переключатель /case, который определяет TABLE_NAME, ID и точный запрос.
Проблема в том, что я пытаюсь подсчитать все объекты таблицы, и я пытаюсь подсчитать их с различными идентификаторами. Например:
query1: "select count(1) from LIST_OF_TOYS where animalId = theListOfIDsfromQuery2"
query2: "select allThePetIDs from LIST_OF_PETS where ownerId = :myID
Это то, что я пытаюсь сделать. Я хочу рассчитать все игрушки, принадлежащие моим домашним животным, но нет прямой связи между моим идентификатором и таблицей LIST_OF_TOYS.
Я знаю, как сделать это с двумя отдельными запросами, но я бы предпочел написать один запрос, который просто принимает ownerId в качестве параметра, поэтому я могу добавить его в свой гигантский переключатель /case (и сохранить мой код аккуратно). Я могу написать запрос, но хочу, но мне было интересно, можно ли это сделать как один запрос и один аргумент. Спасибо за помощь!
select count(1) from LIST_OF_TOYS where animalId in (select allThePetIDs from LIST_OF_PETS where ownerId = :myID)
IN