不在 public 架构中时加入查询

Join query when not in public schema

很抱歉这个菜鸟问题..但是当我在不在 Public..

在 public 模式中写入右外连接

SELECT
    A.pka,
    A.c1,
    B.pkb,
    B.c2
FROM
    A
RIGHT OUTER JOIN B ON A .pka = B.fka;

我正在尝试这个

SELECT
    A.pka,
    A.c1,
    B.pkb,
    B.c2
FROM
    schema.A
RIGHT OUTER JOIN B ON A .pka = B.fka;

然后我得到一个错误"Relation 'B' does not exist" 我也试过其他几种方法都没有成功

谢谢

编辑,我的数据更好的例子。

这是我的查询,我收到错误消息“缺少 table t1

的 FROM 子句条目
SELECT 
   t1.person_id
   t1.age
   t2.person_id
   t2.city
FROM
   not_public.t1 A
RIGHT OUTER JOIN not_public.t2 B ON A.person_id = B.person_id
SELECT
    A.pka,
    A.c1,
    B.pkb,
    B.c2
FROM
    some_schema.table_a A
RIGHT OUTER JOIN other_schema.table_b B ON A.pka = B.fka
    ;
  • 如果架构在 search_path 中,您可以省略 schema_xxx. 前缀。
  • search_path从左到右搜索,使用第一个匹配项。
  • 为了简单和可读性,您可以使用相关名称 ("aliases") 作为 table 引用(此处:AB

让我们从您的查询中获取 FROM 部分:

...
FROM not_public.t1 A
  RIGHT OUTER JOIN not_public.t2 B ...

您正在使用两个 tablet1 和 t2。但是您为两个 table 都定义了一个别名。 t1 未被调用 At2 未被调用 B

但是在您的 SELECT 列表中您使用:

SELECT 
   t1.person_id
   t1.age
   t2.person_id
   t2.city

但是因为您 "renamed" tables t1 和 t2(通过别名)这些名称不再可用。一旦为 table 引入了别名,就必须 始终 使用该别名:

SELECT 
   a.person_id
   a.age
   b.person_id
   b.city