2009-10-24 72 views
0

我有SQL查询PostgreSQL的内部连接

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

它返回错误列Roles.role不存在

查询

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

返回错误失踪子句条目表“角色“

我该如何解决这个问题? 我跳投的工作与MS SQL

回答

2

在连接条件中不能使用名称角色。 内部所有表名称,如角色,角色,角色,RoLeS都转换为角色(小写)。当您使用“角色”,“角色”,“角色”,“RoLeS”时,名称的使用与您所写的完全相同(无小写字母转换),因此在FROM部分中将采用“角色”和“用户”并且在联接条件中表名是角色和用户,并且这些tabbles不存在。

简单的方法是只使用没有“”的表名,只需使用简单的角色而不是“角色”,这样您就可以编写角色或角色,而不管字母是小写还是大写。

+0

f ** k所以我不能使用大字母像用户或姓名字段像?只有小写字母? – kusanagi 2009-10-24 11:20:14

+0

你可以,但是你必须一直使用“”,所以如果你只是创建表“使用者”,那么你必须把它作为“使用者”表。更简单的就是使用用户或用户。 – 2009-10-24 12:04:34

+0

Postgres的文档的相关部分 - http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS – 2009-10-24 23:46:58

0

写像这样:

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

检查INNER JOIN two tables的详细信息...

,或者你可以用简单的方式,它适用于大多数DBMS:

select * from Roles,Users where Roles.Role= Users.RoleId 
+0

哎男人,如果我写“SELECT * FROM角色INNER JOIN用户在(Roles.Role = Users.RoleId)”提示错误“关系‘角色’不存在” 我悲伤,我用MS SQL工作这么我知道如何工作内部加入 – kusanagi 2009-10-24 11:09:36

0

我怀疑你需要写"Roles"."Role" = "Users"."RoleId",因为它抱怨无法找到小写字母的名字。

正如其他人所提到的,即使在查询中使用混合大小写,通常最容易创建为小写字母,因此如果表格被称为“角色”和列“角色”等,您可以编写Roles.Role = Users.RoleId和标识符将在幕后转换为小写字母。