我有一些像这样的表:
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)
它返回了其中一个服务名称。我想知道是否有可能在一个查询中获得所有这些列表。感谢
答案 0 :(得分:1)
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)))