0
Postgres 9.4
4个表格之间有多对多的关系。我创建的附加表来实现的关系:如何从Postgres中的多个相关表中检索数据?
CREATE TABLE "public"."relation" (
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"table1" uuid NOT NULL,
"table2" uuid,
"table3" uuid,
"table4" uuid,
"approved" bool DEFAULT true,
CONSTRAINT "relation_pkey" PRIMARY KEY ("id") NOT DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT "table1" FOREIGN KEY ("table1") REFERENCES "public"."table1" ("id") ON UPDATE NO ACTION ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT "table2" FOREIGN KEY ("table2") REFERENCES "public"."table2" ("id") ON UPDATE NO ACTION ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT "table3" FOREIGN KEY ("table3") REFERENCES "public"."table3" ("id") ON UPDATE NO ACTION ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE,
CONSTRAINT "table4" FOREIGN KEY ("table4") REFERENCES "public"."table4" ("id") ON UPDATE NO ACTION ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
)
WITH (OIDS=FALSE);
ALTER TABLE "public"."relation" OWNER TO "postgres";
我需要从table1
检索单列包括来自其他表作为JSON对象相关的所有行。从relation
表 在这里,我检索到的行:
SELECT t.*
FROM (SELECT table1.id,
(select row_to_json(relations.*) as array_to_json
from(select * from relation where table1 = table1.id) relations
) as relations,
from public.table1) t
但我无法弄清楚如何有效地通过从relation
表中的数据检索相关表中的行。
可能是这个有价值的信息:
relation
表中的每一行只包含两个关系。例如,它可能包含与table1和table2的关系。其余列是空的(当然,除了id
)。 表table1,2,3,4
的每一行都少于10个关系。
我要找回这样的事情:
{
id: table1.id,
name: table1.name,
related_items: [
{id: table2.id, name: table2.name},
{id: table4.id, name: table4.name},
{id: table3.id, name: table3.name},
{id: table2.id, name: table2.name},
{id: table3.id, name: table3.name},
]
}
谢谢您的时间!
你想1.提取使用的关系表,2都在一个记录所有四位关联表中的数据,然后3.使用row_to_json功能得到相当于JSON? – vmachan
我已添加说明的答案 – stkvtflw
试试这个帖子 - http://stackoverflow.com/questions/13227142/postgresql-9-2-row-to-json-with-nested-joins。它包含了很多关于你想要做什么的有用信息 – vmachan