Выберите поля не из таблицы в Корме
Я пытаюсь выполнить объединение нескольких таблиц (три плюс таблица объединения в середине). Я думаю, что Корма лениво оценивает последнее присоединение. Я пытаюсь добавить условие, ограничивающее результаты первой таблицы в объединении, но меня интересуют только поля из последней таблицы в объединении.
Так, например, скажем, у меня есть 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"}))))
Это немного более явно, но в качестве дополнительного преимущества он запускается с одним запросом.