我正在尝试跨多个表进行连接(三个表加上中间的一个连接表)。我觉得科尔玛是在懒洋洋地评估最后一次加入。我要做的是添加一个条件,限制联接中第一个表的结果,但我只对联接中最后一个表中的字段感兴趣。
例如,我有clubs、people和hobbies表,以及最后两个表的people-to-hobbies连接表。每个俱乐部都可以有很多人,每个人都可以有很多爱好。
我正在尝试获取属于某一特定俱乐部的人的所有爱好的全部细节,但我不想从club表中得到任何字段。join表意味着korma将创建两个查询,一个用于获取特定俱乐部中的所有人员,另一个用于通过people-to-hobbies join表检索此人的业余爱好。
我的korma查询如下所示:
(select clubs
(with people
(with hobbies
(fields :hobby-name :id)
(where {:clubs.name "korma coders"}))))问题是,我还没有指定要从clubs和people中选择哪些字段,默认情况是选择*。如何从这些表中不包含任何字段?这是可能的吗,或者说hobbies被延迟加载是否意味着korma必须在第一个查询中返回一些结果(这会给我一个过滤过的人员列表),所以当我稍后询问它时,它有运行第二个查询所需的ids吗?
发布于 2014-07-22 15:07:58
在这种情况下,我会使用join宏:
(select clubs
(join people)
(join people-to-hobbies)
(join hobbies)
(fields :hobbies.hobby-name :hobbies.id)
(where {:clubs.name "korma coders"}))))它稍微显式一点,但作为额外的好处,它只运行一个查询。
https://stackoverflow.com/questions/21242097
复制相似问题