在具有四个表的Oracle数据库中创建视图,每个表都有主键

Posted

技术标签:

【中文标题】在具有四个表的Oracle数据库中创建视图,每个表都有主键【英文标题】:Creating view in Oracle database having four tables, each table has primary key 【发布时间】:2017-01-25 19:58:27 【问题描述】:

我创建了四个表(company1、company2、company3、company4),所有表中的列名都相同:empid、org、firstname、lastname。这四个表的主键都是empid。我想创建一个视图,它应该带来四个表中的所有数据,这四个表应该是groupedby'org' 和orderedby'empid'。我尝试使用联合,联合所有,加入。

请建议如何创建表或创建视图,因为它将维护数据库以长期用作组织数据库。

【问题讨论】:

按组织分组意味着您将聚合数据,除非您还按 emp_id 分组,否则您无法按其排序。请显示示例输入数据和输出数据 为公司设计 4 张桌子而不是一张桌子的设计决策是什么? 您需要在视图中显示什么?另外,当您说由ORG“分组”时,您实际上是指由ORG“排序”,然后在每个ORG 中,由EMPID 子排序?如果是这样,则 UNION ALL 是正确使用的运算符;和ORDER BY ORG, EMPID。当然,如果您按 ORG分组,则不能按 EMPID 订购,正如 David 已经说过的那样。 @BobC,感谢您的回复,但是我们有不同的子分支,它们在自己的表中维护其数据库,例如 branch1 有数据库表 table1,branch2 有数据库表 table2 等等。 我认为应该是这样的观点,比如 empid 1,2,3... 和 org 'hp' 和 empid 4,5,6 org'dell 等......事情是我想要一个视图,它应该包含按组织名称组织的所有表中的数据,并且根据组织,它应该按 empid 排序,我不希望整个数据按 empid 排序。它应该是第一个 'org' 和 org 'empid' 内。 【参考方案1】:

你的意思是像

create or replace view all_companies
as
select 'company1' company_name,
        empid,
        org,
        firstname,
        lastname
from company1
UNION ALL
select 'company2' company_name,
        empid,
        org,
        firstname,
        lastname
from company2
UNION ALL
select 'company3' company_name,
        empid,
        org,
        firstname,
        lastname
from company3
UNION ALL
select 'company4' company_name,
        empid,
        org,
        firstname,
        lastname
from company4
order by org,empid
;

【讨论】:

@ShoeLance 我可以使用“empid”的顺序,因为它是每个表中的主键。如果我使用“org”分组然后按“empid”排序怎么办。 在视图中添加顺序在任何情况下都是完全多余的。当您从 eth 视图中选择时,您确实需要指定顺序。即select * from all_companies order by company_name,empid @GaneshKandekar PK 是什么并不重要,您也不想 GROUP BY。您正在考虑输出是如何“分组”的,但这来自 ORDER BY。如果您 ORDER BY org then empid 那么一个组织的所有 empid 将在一起。使用 SELECT 将列按您想要的顺序排列。 为什么不按组织订购,empid?此外,ORDER BY 中的整数指的是 SELECT 的列,因此您的 1 和 2 是 company_name,empid 不是 org,empid。 @ShoeLace,@philipxy 感谢您的建议,它对我的​​ ORDER BY org,empid 有效。

以上是关于在具有四个表的Oracle数据库中创建视图,每个表都有主键的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中创建视图最多可以连接多少个表?连接表多了有啥影响…

如何在mysql中创建具有旧数据库中一些表的新数据库[重复]

如何在没有任何视图或任何其他表类型的情况下在 oracle 中创建具有动态列名和动态数据类型的动态表

如何在另一个数据库中的多个数据库中创建多个表的单个视图?

创建一个监听多个表的全局触发器

ORACLE 创建表的SQL语句