Postgres 9.4
4 таблицы связаны между собой many-to-many. Я создал дополнительную таблицу чтобы реализовать эти связи:
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 и table3, остальные столбцы в этой строке пусты (кроме id, конечно).
Каждая строка в таблицах table1,2,3,4 содержит не много связей: от 1 до 10
Благодарю вас за уделенное время!