我有几张这样的桌子
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的位置,并包含所有服务的列表。到目前为止我有这样的想法:
(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)) 这似乎会生成正确的联接,但不包括服务字段。我试着添加
(fields :service.name)它还给了其中一个服务机构的名字。我想知道是否有可能在一个查询中获得所有这些信息的列表。谢谢
发布于 2014-08-06 23:45:50
Korma将负责处理连接,因为您已经定义了这些关系:
(select place (with place-services (with service)))请注意,这似乎是做n+1查询,所以请检查这是可以接受的应用程序。
如果您必须手动完成联接,那么您在字段中指定的任何字符串都将传递给查询,而不需要触摸它,因此您可以用以下方式添加所有字段:
(select place
(fields "service.*")
(join place-services (= :place_services.place_id :id))
(join service (= :place_services.id :service.place_services_id)))https://stackoverflow.com/questions/25169905
复制相似问题