Postgres INNER JOIN ERROR:模式“bar”不存在

Posted

技术标签:

【中文标题】Postgres INNER JOIN ERROR:模式“bar”不存在【英文标题】:Postgres INNER JOIN ERROR: schema "bar" does not exist 【发布时间】:2020-11-06 17:39:42 【问题描述】:

我正在尝试在两个表 foo 和 bar 之间进行内部连接。关系是一对多的。一个 bar 需要一个 foo,一个 foo 可以有任意数量的 bar。令人困惑的是,这两个表都有名为“name”和“id”的列。当我运行查询时,我想将 bar 表上的这些字段分别重命名为“bar_id”和“bar_name”。这是我的查询:

SELECT foo.*, bar.id 'bar_id', bar.name 'bar_name' FROM foo INNER JOIN bar ON foo.id=bar.foo_id;

当我运行这个查询时,我得到:ERROR: schema "bar" does not exist on bar.id

我尝试为两个表名 f 和 b 使用别名,但得到了同样的错误。

我尝试删除“bar”,例如:

SELECT foo.*, id 'bar_id', name 'bar_name' FROM foo INNER JOIN bar ON foo.id=bar.foo_id;

我得到:ERROR: type "id" does not exist

如果我删除“id”,它会起作用,但它不会为列名添加别名,而是替换每一行中该列中的实际 VALUE:

SELECT foo.*, name 'bar_name' FROM foo INNER JOIN bar ON foo.id=bar.foo_id;

产量:

id |  name |   name     
1  |  abc  | bar_name

("bar_name" 实际上应该是 "def")

对这里出了什么问题有什么想法吗?我该如何解决这个问题?

【问题讨论】:

id 'bar_id' 应该是 id "bar_id" 或者只是 id bar_id postgresql.org/docs/current/… 【参考方案1】:

在 Postgres 在这方面遵循的标准 SQL 中,单引号代表文字字符串。对标识符使用双引号而不是单引号(select 子句中的别名) - 或者更好的是,根本不用引号:

SELECT 
    f.*, 
    b.id as bar_id, 
    b.name as bar_name 
FROM foo f
INNER JOIN bar b ON f.id = b.foo_id;

【讨论】:

以上是关于Postgres INNER JOIN ERROR:模式“bar”不存在的主要内容,如果未能解决你的问题,请参考以下文章

两个 INNER JOIN ODBC MSAccess 异常与查询

join on 与inner join 有啥不同呢 ?

SQL中inner join,outer join和cross join的区别

inner join 和outer join的区别

SQL中inner join,outer join和cross join的区别

SQLServer中 join 跟inner join的区别是啥?