从Korma中的表中选择无字段

时间:2014-01-20 19:05:57

标签: clojure korma sqlkorma

我正在尝试跨多个表进行连接(三个表加中间的连接表)。我认为korma懒惰地评估最后一次加入。我想要做的是添加一个限制连接中第一个表的结果的条件,但我只对连接中最后一个表的字段感兴趣。

例如,我说我有clubspeoplehobbies表,以及最后两个people-to-hobbies联接表。每个俱乐部都可以有很多人,每个人都可以有很多爱好。

我正在尝试获取属于特定俱乐部的所有人的爱好的全部细节,但我不想要club表中的任何字段。连接表意味着korma将创建两个查询,一个用于获取特定俱乐部中的所有人,另一个用于通过people-to-hobbies连接表检索该人的爱好。

我的korma查询看起来像这样:

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

问题是我没有从clubspeople指定我想要的字段,默认情况下是选择*。如何从这些表中不包含任何字段?这是可能的,还是hobbies被延迟加载的事实意味着korma必须在第一个查询中返回一些结果(这会让我得到一个过滤的人员列表),这样当我稍后再来询问它时爱好,它有运行第二个查询所需的ID吗?

1 个答案:

答案 0 :(得分:1)

我在这种情况下使用join宏:

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

它更加明确,但作为额外的好处,它可以通过单个查询运行。