внутреннее соединение postgreSQL

у меня есть sql-запрос

select * from "Roles"  Join "Users"  On "Roles".Role="Users".RoleId

он возвращает столбец ошибки Roles.role не существует

запрос

select * from "Roles"  Join "Users"  On Roles.Role=Users.RoleId

ошибка возврата отсутствует запись FROM-предложения для таблицы «роли»

Как я могу решить эту проблему? я всегда работаю с ms sql


person kusanagi    schedule 24.10.2009    source источник


Ответы (3)


Вы не можете использовать имя Роли в условии присоединения. Внутри все имена таблиц, такие как Roles, ROLES, roles, RoLeS, преобразуются в роли (нижний регистр). Когда вы используете «Roles», «ROLES», «roles», «RoLeS», имя используется именно так, как вы написали (без преобразования нижнего регистра), поэтому в части FROM берутся таблицы «Роли» и «Пользователи». и в условии соединения именами таблиц являются роли и пользователи, и таких таблиц не существует.

Самый простой способ - использовать только имена таблиц без "", просто используйте простые роли вместо "ролей", чтобы вы могли писать роли или роли независимо от букв нижнего/верхнего регистра.

person Szymon Lipiński    schedule 24.10.2009
comment
Черт, так что я не могу использовать большие буквы, такие как «Пользователи», или поля имени, такие как «Фамилия»? только с маленькой буквы? - person kusanagi; 24.10.2009
comment
Вы можете, но тогда вам придется использовать все время, поэтому, если вы просто создаете таблицу Users, вы должны связать это как таблицу Users. Гораздо проще просто использовать пользователей или пользователей. - person Szymon Lipiński; 24.10.2009
comment
Соответствующий раздел документации Postgres — postgresql.org/docs/current/static/ - person Milen A. Radev; 25.10.2009

напишите так:

select * from Roles  INNER JOIN Users  On (Roles.Role= Users.RoleId)

проверьте ВНУТРЕННЕЕ СОЕДИНЕНИЕ двух таблиц для получения дополнительной информации...

или вы можете использовать простой способ, который работает с большинством СУБД:

select * from Roles,Users where Roles.Role= Users.RoleId
person Wael Dalloul    schedule 24.10.2009
comment
эй, мужики, если я пишу «выбрать * из ролей INNER JOIN Users On (Roles.Role = Users.RoleId)», это дает ошибку «роли отношений не существуют», мне грустно, я работал с ms sql, поэтому я знаю, как работает внутреннее соединение - person kusanagi; 24.10.2009

Я подозреваю, что вам нужно было написать "Roles"."Role" = "Users"."RoleId", потому что он жалуется на то, что не может найти имя столбца в нижнем регистре.

Как уже упоминалось, обычно проще всего создать все в нижнем регистре, даже если вы используете смешанный регистр в запросах: поэтому, если таблица называется «роли», а столбец «роль» и т. д., вы можете написать Roles.Role = Users.RoleId, и идентификаторы будут преобразованы в нижний регистр за кулисами.

person araqnid    schedule 25.10.2009