Sql 科玛从另一张桌子上拿了很多
我有一些这样的表格:Sql 科玛从另一张桌子上拿了很多,sql,database,clojure,korma,Sql,Database,Clojure,Korma,我有一些这样的表格: 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 INT
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)
它返回了一个服务的名称。我想知道是否有可能在一个查询中得到所有这些问题的列表。谢谢Korma将负责执行连接,因为您已经定义了关系:
(select place (with place-services (with service)))
请注意,这似乎是n+1查询,因此请检查您的应用程序是否可以接受
如果必须手动VDO联接,则字段中指定的任何字符串都将被传递到查询,而不必触碰它,因此您可以添加具有以下内容的所有字段:
(select place
(fields "service.*")
(join place-services (= :place_services.place_id :id))
(join service (= :place_services.id :service.place_services_id)))
有什么特别的理由不使用(选择地点(有地点服务)(有服务))?@dAni没有。我只是不知道,对不起。您想将其添加到您的答案中以便我可以接受吗?我已更新了答案