在具有四个表的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中创建具有旧数据库中一些表的新数据库[重复]