У меня есть несколько источников данных (на данный момент 4, теоретически может увеличиться в будущем), поступающих в несколько таблиц PostgreSQL, и я хотел бы создать представление, сравнивающее разные источники для каждой записи. К сожалению, не все записи отображаются в каждой таблице.
В настоящее время запрос, который я использую, отформатирован следующим образом
select [relevant_fields] from ((tableA full outer join tableB on
tableA.id=tableB.id) full outer join tableC on tableA.id=tableC.id)
full outer join tableD on tableD.id=tableA.id
Проблема с этим запросом заключается в том, что если запись находится в таблицах B, C и D, но не в таблице A, она превращается в 3 (в основном нулевые) строки, по одной для каждого источника данных. Я понимаю, что есть способ сделать это путем добавления во вторичную таблицу, но мне было интересно, есть ли способ сделать это непосредственно в select/view, поскольку некоторые из этих таблиц довольно большие и будут только увеличиваться, и я бы предпочел не столкнуться с проблемой памяти в будущем, потому что у меня хранится несколько копий каждой записи.
Итак, мой вопрос: есть ли способ структурировать соединения, чтобы выполнить 1 (как можно более заполненную) строку для каждой записи в выборе/представлении?
Редактировать, Пример данных:
Table A
id | value
1 | a
2 | b
3 | c
Table B
id | value
1 | A
3 | Z
Table C
id | value
1 | Q
4 | D
Table D
id | value
1 | a
3 | C
Result
id | val_A | val_B | val_C | val_D
1 | a | A | Q | a
2 | b | null | null | null
3 | c | Z | null | C
4 | null | null | D | null