Возможно ли объединить эти два запроса?

1

Я пишу 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 (и сохранить мой код аккуратно). Я могу написать запрос, но хочу, но мне было интересно, можно ли это сделать как один запрос и один аргумент. Спасибо за помощь!

  • 0
    "..не прямая ссылка ..." Вот твоя проблема.
  • 1
    Проверьте оператор SQL IN
Теги:

1 ответ

3
Лучший ответ
select count(1) from LIST_OF_TOYS where animalId in (select allThePetIDs from LIST_OF_PETS where ownerId = :myID)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню