2009-10-24 84 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和標識符將在幕後轉換爲小寫字母。