使用 ecto 查询连接 3 个表
Join 3 tables using ecto query
这里是 Postgres
的场景
CREATE TABLE "hearings" (
"hearing_id" int4 NOT NULL,
"date" timestamp NOT NULL,
"time" varchar(32),
"committee" varchar(255),
"summary" text,
);
CREATE TABLE "categories" (
"category_id" int4 NOT NULL,
"description" varchar(255) NOT NULL,
"type" varchar(32) DEFAULT 'normal' NOT NULL,
);
CREATE TABLE "hearing_category_link" (
"hearing_id" int4 NOT NULL,
"category_id" int4 NOT NULL,
);
Postgres 查询:
SELECT * FROM
(hearings LEFT JOIN hearing_category_link ON hearings.hearing_id = hearing_category_link.hearing_id )
LEFT JOIN categories ON hearing_category_link.category_id = categories.category_id
到目前为止,我只能用一个 table
加入当前查询
from h in "hearings", join: hl in "hearing_category_link", on: hl.hearing_id == h.hearing_id
但我想使用 ecto 加入这 3 个 tables 并获得结果(动态会很棒)。 Another similar question but with postgres
您只需编写 2 个连接:
from hearing in "hearings",
join: hcl in "hearing_category_link", on: hcl.hearing_id == hearing.id,
join: category in "categories", on: hcl.category_id == category.id
这里是 Postgres
的场景CREATE TABLE "hearings" (
"hearing_id" int4 NOT NULL,
"date" timestamp NOT NULL,
"time" varchar(32),
"committee" varchar(255),
"summary" text,
);
CREATE TABLE "categories" (
"category_id" int4 NOT NULL,
"description" varchar(255) NOT NULL,
"type" varchar(32) DEFAULT 'normal' NOT NULL,
);
CREATE TABLE "hearing_category_link" (
"hearing_id" int4 NOT NULL,
"category_id" int4 NOT NULL,
);
Postgres 查询:
SELECT * FROM
(hearings LEFT JOIN hearing_category_link ON hearings.hearing_id = hearing_category_link.hearing_id )
LEFT JOIN categories ON hearing_category_link.category_id = categories.category_id
到目前为止,我只能用一个 table
加入当前查询from h in "hearings", join: hl in "hearing_category_link", on: hl.hearing_id == h.hearing_id
但我想使用 ecto 加入这 3 个 tables 并获得结果(动态会很棒)。 Another similar question but with postgres
您只需编写 2 个连接:
from hearing in "hearings",
join: hcl in "hearing_category_link", on: hcl.hearing_id == hearing.id,
join: category in "categories", on: hcl.category_id == category.id