Задать вопрос
@hbrmdc

Как получить данные из нескольких связанных таблиц в Postgres?

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

Благодарю вас за уделенное время!
  • Вопрос задан
  • 2227 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
romy4
@romy4
Exception handler
Как это вы не знаете про JOIN?
> в виде JSON объекта.
делайте это на принимающей стороне
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы