Здравствуйте уважаемые коллеги! Предыстория: есть некоторые свои наработки на 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 не позволяет такие выверты.
Представьте пользователь создал и отладил программу, где используется такой запрос, а потом, через какое-то время взял и внёс изменения в структуру одной из таблиц. Результат выполнения запроса стал непредсказуемым! Такую ошибку можно было бы искать очень и очень долго!
Так что не всё что выглядит логичным с точки зрения пользователя на самом деле правильно!