В Postgres есть аналог connect by. Вам нужно будет включить модуль. Он выключен по умолчанию.
Он называется tablefunc. Он поддерживает некоторые интересные функции перекрестных таблиц, а также знакомые функции «подключиться» и «Начать с». Я обнаружил, что он работает гораздо более красноречиво и логично, чем рекурсивный CTE. Если ваш администратор баз данных не может включить это, вам следует использовать способ, которым это делает Erwin.
Он достаточно надежен, чтобы также выполнять запрос типа "ведомость материалов".
Tablefunc можно включить, выполнив эту команду:
CREATE EXTENSION tablefunc;
Вот список полей подключения, взятый из официальной документации.
Parameter: Description
relname: Name of the source relation (table)
keyid_fld: Name of the key field
parent_keyid_fld: Name of the parent-key field
orderby_fld: Name of the field to order siblings by (optional)
start_with: Key value of the row to start at
max_depth: Maximum depth to descend to, or zero for unlimited depth
branch_delim: String to separate keys with in branch output (optional)
Вы действительно должны взглянуть на страницу документов. Это хорошо написано, и это даст вам варианты, к которым вы привыкли. (На странице документа прокрутите вниз, она ближе к низу.)
Расширение Postgreql "Connect by" Ниже приведено описание того, как разместить эту структуру вместе должно быть похоже. Существует масса возможностей, поэтому я не буду воздавать должное, но вот его фрагмент, чтобы дать вам представление.
connectby(text relname, text keyid_fld, text parent_keyid_fld
[, text orderby_fld ], text start_with, int max_depth
[, text branch_delim ])
Реальный запрос будет выглядеть так. Connectby_tree — это имя таблицы. Строка, начинающаяся с «AS», — это то, как вы называете столбцы. Он выглядит немного перевернутым.
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
AS t(keyid text, parent_keyid text, level int, branch text, pos int);
person
Stradas
schedule
15.06.2016