Выберите поля не из таблицы в Корме

Я пытаюсь выполнить объединение нескольких таблиц (три плюс таблица объединения в середине). Я думаю, что Корма лениво оценивает последнее присоединение. Я пытаюсь добавить условие, ограничивающее результаты первой таблицы в объединении, но меня интересуют только поля из последней таблицы в объединении.

Так, например, скажем, у меня есть clubs, people а также hobbies столы и people-to-hobbies присоединиться к столу за последние два. У каждого клуба может быть много людей, и у каждого человека может быть много хобби.

Я пытаюсь получить полную информацию обо всех увлечениях людей, которые принадлежат к определенному клубу, но я не хочу никаких полей от club Таблица. Таблица соединений означает, что korma создаст два запроса, один для получения всех людей, которые находятся в определенном клубе, а другой для получения хобби для этого человека через people-to-hobbies присоединиться к столу.

Мой запрос korma выглядит примерно так:

(select clubs
  (with people
    (with hobbies
      (fields :hobby-name :id)
      (where {:clubs.name "korma coders"}))))

Проблема в том, что я не указал, какие поля мне нужны clubs а также peopleи по умолчанию выбирается *, Как я могу не включать поля из этих таблиц? Это возможно, или делает тот факт, что hobbies означает, что korma возвращает некоторые результаты в первом запросе (что приводит меня к отфильтрованному списку людей), поэтому, когда я приду к нему позже, чтобы узнать его хобби, у него есть идентификаторы, необходимые для выполнения второго запроса?

1 ответ

Решение

Я бы использовал join макрос в таком случае:

(select clubs
  (join people)
  (join people-to-hobbies)
  (join hobbies)
  (fields :hobbies.hobby-name :hobbies.id)
  (where {:clubs.name "korma coders"}))))

Это немного более явно, но в качестве дополнительного преимущества он запускается с одним запросом.

Другие вопросы по тегам