【问题标题】:Differentiate a schema from a table?区分模式和表?
【发布时间】:2014-07-10 16:33:08
【问题描述】:

在 Postgresql 中,查询因说模式“purchase_order”不存在而出现错误。

from ((select a.item_no
    from stocka a
        join order_item oi
            on (oi.item_no = a.item_no)
        join purchase_order po
            on (po.order_no = oi.order_no)
    where po.location = 'LocationA'
    ) UNION ALL
    (select b.item_no
    from stockb b
        join order_item oi
            on (oi.item_no = b.item_no)
        join purchase_order po
            on (po.order_no = oi.order_no)
    where po.location = 'LocationB'
    ))

Union 用于 from 子句

出于某种原因,说 purchase_order 不是一个表,而是一个模式。

【问题讨论】:

  • 还请发布SHOW search_path; 的输出 - 以及(一如既往)您的 Postgres 版本。另外,错误消息的逐字副本。

标签: sql postgresql schema


【解决方案1】:

您描述的错误不是由于您发布的代码,这应该可以工作 - 假设对象存在。

我只添加了一个alias for the subquerysub(必需!),简化为USING(可选),删除了多余的括号并重新格式化:

SELECT *
FROM  (
   SELECT a.item_no
   FROM   stocka a
   JOIN   order_item     oi USING (item_no)
   JOIN   purchase_order po USING (order_no)
   WHERE  po.location = 'LocationA'

   UNION ALL
   SELECT b.item_no
   FROM   stockb b
   JOIN   order_item     oi USING (item_no)
   JOIN   purchase_order po USING (order_no)
   WHERE  po.location = 'LocationB'
   ) sub;

根据数据库布局(表定义?)和确切要求,这可能会进一步简化。

【讨论】:

  • 只是一个简单的问题,sub 是什么;什么意思?
  • @Padagomez: sub 是我提到的子查询的别名——任意名称。我添加了手册的链接。
  • 谢谢。那我就不需要用括号分隔工会了吗?
  • @Padagomez:不。仅当您想在单个 SELECT 中包含 ORDER BYLIMIT 时才需要这些,它们通常仅适用于整个 UNION 查询。 Example with more info.
  • 由于某种原因它仍然给我同样的错误
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多