sql - 在单个视图中组合来自 db 的多个表
问题描述
我的数据库中有三个表。
表1结构:
date, family, class2, sec2, core1, nlm
表2结构:
date, family, class2, sec2, core2, prefix
表3结构:
date, family, class3, sec3, core3, root
我想创建一个组合这三个表的视图。视图将具有如下结构:
date, class, sec, core, group_of_family
类在表 1 中作为类 1、表 3 中的类 2 和表 3 中的类 3 存在。秒和核心相同。
在上述数据中,一组日期、类、秒和核心可以是不同系列的一部分,例如:
表1结构:
date, family, class2, sec2, core1, nlm
22/7/2020, f1, r1, p1, xyz, pqr
22/7/2020 f2, r1, p1, xyz, pqrs
24/7/2020 f5, r2, p4, sds, dsg
表2结构:
date, family, class2, sec2, core1, nlm
22/7/2020, f4, r1, p1, xyz, pqr
24/7/2020 f8, r6, p1, fds, sdg
表3结构:
date, family, class2, sec2, core1, nlm
28/7/2020, f14, r1, p1, xyz, pqr
24/7/2020 f18, r6, p1, fds, sdg
所以我想要的视图应该是这样的:
date, class, sec, core, group_of_family
22/7/2020, r1, p1, xyz, f1,f2,f4
24/7/2020, r2, p4, sds, f5
24/7/2020, r6, p1, fds, f8,f18
28/7/2020, r1, p1, xyz, f14
我是新的 Postgresql 数据库,在编写复杂查询方面没有太多经验。
有人可以帮我查询吗?谢谢。
解决方案
所以给定的数据是:
create table tbl1
(
date date,
family text,
class2 text,
sec2 text,
core1 text,
nlm text
);
insert into tbl1 values
('2020-07-22','f1','r1','p1','xyz','pqr'),
('2020-07-22','f2','r1','p1','xyz','pqrs'),
('2020-07-24','f5','r2','p4','sds','dsg');
create table tbl2
(
date date,
family text,
class2 text,
sec2 text,
core1 text,
nlm text
);
insert into tbl2 values
('2020-07-22','f4','r1','p1','xyz','pqr'),
('2020-07-24','f8','r6','p1','fds','sdg');
create table tbl3
(
date date,
family text,
class2 text,
sec2 text,
core1 text,
nlm text
);
insert into tbl3 values
('2020-07-28','f14','r1','p1','xyz','pqr'),
('2020-07-24','f18','r6','p1','fds','sdg');
询问:
create view vw_test as
select date,class,sec,core,string_agg(family,',') as group_of_family
from
(
select date,class2 as class,
sec2 as sec,
core1 as core,
family
from tbl1
union
select date,class2 as class,
sec2 as sec,
core1 as core,
family
from tbl2
union
select date,class2 as class,
sec2 as sec,
core1 as core,
family
from tbl3
)a
group by date,class,sec,core;
检查预期结果:
select * from vw_test;
推荐阅读
- arrays - 使用 bash/expect 中的变量对数组进行索引
- windows - windows子系统linux发行版的本机启动,作为windows 10启动时的标准发行版
- c# - C#外语学习程序
- mysql - 与 Rails 反应 - 在服务器日志中回滚
- php - 将超链接添加到 wordpress 网站的页脚文本(besquares 的 darina 主题)
- java - 如果捕获到 IOException,如何关闭 Http URL 连接?- 爪哇
- windows - 无法在 Windows 上安装 hbase
- python - 我怎么可能在 outer() 函数中调用嵌套的 len() 函数
- networking - Graphviz:如何在另一个上创建重叠子节点?
- php - 复杂的循环通过复杂的 SimpleXMLElement