首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >考尔玛-很多人通过另一张桌子。

考尔玛-很多人通过另一张桌子。
EN

Stack Overflow用户
提问于 2014-08-06 20:47:43
回答 1查看 866关注 0票数 0

我有几张这样的桌子

代码语言:javascript
复制
CREATE TABLE place (
    id INTEGER NOT NULL, 
    name VARCHAR(75)
);

CREATE TABLE place_services (
    id INTEGER NOT NULL,
    place_id INTEGER
);

CREATE TABLE service (
    name VARCHAR(100),
    value BOOL,
    place_services_id INTEGER
);

我正在使用clojure中的Korma库,我希望有一个查询,该查询获得一个id的位置,并包含所有服务的列表。到目前为止我有这样的想法:

代码语言:javascript
复制
(defentity service)

(defentity place-services
  (table :place_services)
  (has-many service)

(defentity place
  (has-one place-services))

(select place
  (join place-services (= :place_services.place_id :id))
  (join service (= :place_services.id :service.place_services_id))     

这似乎会生成正确的联接,但不包括服务字段。我试着添加

代码语言:javascript
复制
(fields :service.name)

它还给了其中一个服务机构的名字。我想知道是否有可能在一个查询中获得所有这些信息的列表。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-06 23:45:50

Korma将负责处理连接,因为您已经定义了这些关系:

代码语言:javascript
复制
   (select place (with place-services (with service)))

请注意,这似乎是做n+1查询,所以请检查这是可以接受的应用程序。

如果您必须手动完成联接,那么您在字段中指定的任何字符串都将传递给查询,而不需要触摸它,因此您可以用以下方式添加所有字段:

代码语言:javascript
复制
(select place
   (fields "service.*")
   (join place-services (= :place_services.place_id :id))
   (join service (= :place_services.id :service.place_services_id)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25169905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档