Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 科玛从另一张桌子上拿了很多_Sql_Database_Clojure_Korma - Fatal编程技术网

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没有。我只是不知道,对不起。您想将其添加到您的答案中以便我可以接受吗?我已更新了答案