Как правильно разрулить ошибку column reference "xxxx" is ambiguous

Здравствуйте уважаемые коллеги! Предыстория: есть некоторые свои наработки на php - подобие фреймфорка, в нем есть некоторый код который динамически формирует строку SQL-запроса
наподобие такой:

$query="select main_user as TMF from main_users 
left join main_users_grps_view on main_users_grps_view.main_user_id=main_users.main_user_id 
left join main_users_auth_view on main_users_auth_view.main_user_id=main_users.main_user_id 
left join main_grps on main_grps.main_grp_id = main_users_grps_view.main_grp_id 
left join main_account_types on main_account_types.main_account_type_id=main_users.main_account_type_id 
where main_users.main_user_id=1294

данный запрос выдает ошибку "ERROR: column reference "main_user" is ambiguous" поскольку колонка main_users повторяется в нескольких включенных таблицах/представлениях. Структура таблиц/представлений такова, что в принципе пофик из какой таблицы брать поле main_user, можно ли как то сказать postgresql об этом? чтоб он не выдавал эту ошибку, в приведенном выше запросе, а брал эту колонку из первой попавшейся ему таблицы?
Если сделать main_user=main_users_grps_view.main_user то естественно все работает, но делать это на стороне PHP в моем случае не очень удобно, возможно на стороне postgres это получится более элегантно. Заранее спасибо за помощь

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А откуда PostgreSQL должен

А откуда PostgreSQL должен знать пофигу ли вам откуда брать или не пофигу? Нет, требуется точное указание таблицы откуда брать. По-другому никак.

Согласитесь, что с точки

Согласитесь, что с точки зрения пользователя ситуация выглядит логично: раз мы не указываем имя таблицы, значит нам не важно из которой из них брать поле. И постгрес вполне мог бы вместо вывода ошибки поднапрячься, провести некоторые вычисления и вывести поле из первой from таблицы в которой оно встречается.
Я предположил, что может какая нибудь директива есть в конфиге аля ambiguous_column_auto_resolve, либо функция from_any_fromtable(имя_поля) использование которых заставляет postgres самому разрешать конфликты.
Ну раз нет то нет, будем ковырять php, спасибо за ответ.

Это только на 1-й взгляд

Это только на 1-й взгляд кажется логичным. Хорошо, что PostgreSQL не позволяет такие выверты.
Представьте пользователь создал и отладил программу, где используется такой запрос, а потом, через какое-то время взял и внёс изменения в структуру одной из таблиц. Результат выполнения запроса стал непредсказуемым! Такую ошибку можно было бы искать очень и очень долго! :)

Так что не всё что выглядит логичным с точки зрения пользователя на самом деле правильно!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023