【问题标题】:Retrieving data from multiple schemas in a single database从单个数据库中的多个模式中检索数据
【发布时间】:2013-03-02 11:17:08
【问题描述】:

我在一个 database 中有多个 schemas

说,

  • DBTEST(数据库)

    1. SCH001 (schema1)

    2. SCH002 (schema2)

同样,我有一个名为 Tbl 的表,它存在于上面给出的两种模式中。
现在我已经通过使用下面这样的union all 关键字从表SCH001.tblSCH002.tbl 中检索到数据,

select * From SCH001.tbl union all select * From SCH002.tbl

上面的查询没有任何问题,但我的老板要求我使用其他技术来实现相同的效果(没有联合全部/联合)。所以我想问的是, 在我的情况下,Union all 是否有任何补救措施可以得到相同的结果?如果不是,请告诉为什么在这种情况下无法替换Union all的原因。?

【问题讨论】:

  • 我会反过来问这个问题。为什么使用 UNION ALL ?
  • 如果你的老板这么聪明,也许他会告诉你应该使用什么技术?如果他不知道,也许他应该保持安静。你的解决方案没问题。 union all 不能被替换……让我想想……因为这是你从两个表中获取数据的方式?
  • UNIONMySQL 中可用之前,我们必须加入一个虚拟表。但是,这是一个杂项,十多年来不推荐使用。
  • @SzymonGuz If your boss is so clever, maybe he will just tell you what technique you should use? 这是我今天分配任务时的想法,无论如何根据讨论,我可以最终确定 UNION All 没有有效的替代品。顺便说一句,我需要一个答案才能接受。谢谢。

标签: sql database postgresql schema union-all


【解决方案1】:

如果你的老板认为一直(一直)使用这个工会是丑陋的,为什么不考虑一下呢? 只需引用两个联合部分中的所有字段,并将其呈现为组合视图 (我说这导致在视图中使用 * 通常不好)

我不知道你是否可以索引这样的视图,但它确实值得一试, 我相信你只有在做索引视图时才必须使用一个模式,但我不确定这一点 (但如果可能的话,这将是比“仅仅”联合更好的解决方案)

(该领域的新手) :EDIT: 你不能(在 Microsoft sql 中)在一个联合上创建物化视图,和/或因此在不同的模式上,(它们也是模式绑定的)

无论如何,我都会亲自使用该视图,它只是一种为您的数据提供编程接口的好方法,您可以在一天内更换! :编辑:

但事实是......它仍然是一个联盟

【讨论】:

  • create view 中使用 * 并没有什么不同。视图定义将存储创建视图时存在的列列表。 *不会被存储。
  • 你是对的,我想这是我个人的喜好,除非测试/寻找数据,否则不要使用 *
猜你喜欢
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2023-03-21
  • 2015-09-10
相关资源
最近更新 更多