Возможно ли иметь выборочные запросы в PostgreSQL, которые выбирают разные таблицы/столбцы на основе значений уже выбранных строк?
В принципе, у меня есть таблица, в которой каждая строка содержит последовательность из двух-пяти символов (tbl_roots), необязательно с полем длины, которое определяет, сколько символов должна содержать последовательность (она должна быть сделанный избыточным, когда я выясню лучший способ, т.е. подсчитав длину последовательностей).
Существует четыре таблицы, содержащие шаблоны (tbl_patterns_biliteral, tbl_patterns_triliteral,... и т.д.), каждая из которых соответствует root_length и пятой таблице (tbl_patterns), которая используется для синхронизации шаблона таблицы путем предоставления идентификатора для каждой строки, поэтому строка # 2 в tbl_patterns_biliteral соответствует той же строке в tbl_patterns_triliteral. Шесть таблиц шаблонов ограничены таким образом, что ни одна строка в tbl_patterns_(bi|tri|quadri|quinqui)literal не может иметь pattern_id, которая не существует в tbl_patterns.
Каждая таблица шаблонов содержит девять других столбцов, которые соответствуют идентификатору (root_form).
Последняя таблица в базе данных (tbl_words) содержит столбец для каждой из основных таблиц (word_id, root_id, pattern_id, root_form, word). Каждое слово определяется как корень определенной длины и формы, сплайсированный в конкретный шаблон. Склеивание относительно просто: translate(pattern, '12345', array_to_string(root, '')) as word_combined выполняет задание.
Теперь я хочу выбрать соответствующую таблицу шаблонов на основе длины последовательности в tbl_roots и выбрать соответствующий столбец в таблице шаблонов на основе значения root_form.
Как это можно сделать? Может ли он быть объединен в простой запрос, или мне нужно сделать несколько проходов? После того, как я построил этот запрос, я смогу записать его в PHP script, который может выполнять поиск в моей базе данных.
ИЗМЕНИТЬ
Вот некоторые примеры данных (это фактически данные, которые я использую в данный момент) и еще несколько объяснений относительно того, как работает система: https://gist.github.com/823609
Это концептуально проще, чем кажется на первый взгляд, особенно если вы думаете об этом как о системе координат.
