【问题标题】:postgreSQL inner joinpostgreSQL 内连接
【发布时间】:2009-10-24 11:02:52
【问题描述】:

我有 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

【问题讨论】:

    标签: sql postgresql inner-join


    【解决方案1】:

    您不能在连接条件中使用名称角色。 在内部,所有表名,如 Roles、ROLES、roles、RoLeS 都转换为角色(小写)。当您使用“角色”、“角色”、“角色”、“角色”时,名称的使用与您所写的完全一致(没有小写转换),因此在 FROM 部分中使用“角色”和“用户”表并且在连接条件中,表名是角色和用户,这样的表格不存在。

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

    【讨论】:

    • f**k 所以我不能使用像用户这样的大字母或像姓这样的名称字段?只有小写字母?
    • 你可以,但是你必须一直使用“”,所以如果你只是创建表“用户”,那么你必须将它与“用户”表相关联。使用用户或用户要容易得多。
    • Postgres 文档的相关部分 - postgresql.org/docs/current/static/…
    【解决方案2】:

    这样写:

    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
    

    【讨论】:

    • 嘿,伙计们,如果我写'select * from Roles INNER JOIN Users On (Roles.Role= Users.RoleId)' 它会给出错误'关系“角色”不存在'我很难过ms sql 所以我知道内部连接是如何工作的
    【解决方案3】:

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

    正如其他人所提到的,将所有内容创建为小写通常是最简单的,即使您在查询中使用混合大小写:因此,如果表称为“角色”而列称为“角色”等,您可以编写 Roles.Role = Users.RoleId并且标识符将在后台转换为小写。

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 2019-12-18
      • 2013-04-12
      • 2021-08-30
      • 2014-08-25
      • 2012-07-30
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多