首页 新闻 搜索 专区 学院

求助SQL Sever如何将多个表合并成一个表

0
悬赏园豆:100 [已解决问题] 解决于 2018-06-05 10:13

我想创建一个视图,把下面的表全部合称到一个表中去,方便我直接进行查询,不在乎效率低下,求助高手帮忙看看该怎么写

LiuDanK的主页 LiuDanK | 初学一级 | 园豆:15
提问于:2018-06-04 17:12

1.Routes表的两个外键DepartureAireportID 和ArrivalAirportID 都=Airports的ID,这个好奇怪,确定没有画错?

  1. 不能用* 来查询所有字段,因为各个表都有相同的field,这里篇幅有限,就不一一列出,请把每个表的字段根据简称list出来
    3.请执行一下,如有报错,请贴出来,我们继续共同找下问题原因
筱筱的春天 2年前

@筱筱的春天: 首先第一个问题是因为routes表是线路表,两个字段分别为出发地和目的地,所以都来自与airports(机场)表

柳芽 2年前

@筱筱的春天: 运行会出现以下报错:Column names in each view or function must be unique. Column name 'ID' in view or function 'all_table' is specified more than once.
每个视图或函数中的列名必须是唯一的。在视图或函数“all_table”中指定列名“ID”的次数不止一次。

柳芽 2年前

@柳芽: 评论里有提到这一点 “ 不能用* 来查询所有字段,因为各个表都有相同的field,这里篇幅有限,就不一一列出,请把每个表的字段根据简称list出来 ”

现在问题解决了么?

筱筱的春天 2年前

@筱筱的春天: 你好,问题基本解决了,我把每个表的字段都起了别名

柳芽 2年前
< >
分享
最佳答案
1

create view all_table as
begin
SELECT *
FROM offices o
inner join countries c on c.id = o.countryid
inner join users u on u.officeid = o.id
inner join roles r on r.id = u.roleid
inner join airports a on a.countryid = c.id
inner join routes ro on ro.arrivalairportid = a.id and ro.departureairportid = a.id
inner join schedules s on s.routeid = ro.id
inner join aircrafts ai on ai.id = s.aircraftid
end

收获园豆:100
筱筱的春天 | 菜鸟二级 |园豆:295 | 2018-06-04 18:00

create view all_table as
SELECT *
FROM offices o
inner join countries c on c.id = o.countryid
inner join users u on u.officeid = o.id
inner join roles r on r.id = u.roleid
inner join airports a on a.countryid = c.id
inner join routes ro on ro.arrivalairportid = a.id 

inner join airport a2 on ro.departureairportid = a2.id

inner join schedules s on s.routeid = ro.id
inner join aircrafts ai on ai.id = s.aircraftid

代码改成这样基本就没什么问题了,说的那个问题是因为每一个表中都有一个叫做ID的字段,所以不可以直接使用*查询,需要取别名才可以

LiuDanK | 园豆:15 (初学一级) | 2018-06-04 20:05
其他回答(2)
0

看不懂图,就将表这边连接,那边连接,然后就好了

华临天下 | 园豆:1394 (小虾三级) | 2018-06-04 17:21

 额......我可能是个小白

支持(0) 反对(0) LiuDanK | 园豆:15 (初学一级) | 2018-06-04 17:24

@柳芽: 不要着急,你先将主表跟其中的一个表先连接,一个连接起来了,试试两个,在试试三个。。。试着试着你发现,差不多都一样的

支持(0) 反对(0) 华临天下 | 园豆:1394 (小虾三级) | 2018-06-04 17:26

@华临天下: 谢谢您的热情回复

支持(0) 反对(0) LiuDanK | 园豆:15 (初学一级) | 2018-06-04 20:02
1

create view v_port(自己命名) as

select *

from office a inner join Users b on  a.ID=b.QliaceID

inner join Roles c on b.RoleID=c.ID

inner join Countries d on a.countryid=d.id

inner join Airports e on e.countryID=d.id

inner join  routcs f on e.id=f.arrayairportID and e.id=DepartureAirportID

inner join  Schcdulcs g on f.id=g.routcID

inner join Aircrafts h on g.AirportID=h.id

可以选择left join (左关联或者右关联) 关键字段有些看不清楚,自己对一对。 

good_idea | 园豆:74 (初学一级) | 2018-06-04 17:58

 谢谢您的热情回复

支持(0) 反对(0) LiuDanK | 园豆:15 (初学一级) | 2018-06-04 20:02

1. 评论里有提到这一点 “ 不能用* 来查询所有字段,因为各个表都有相同的field,这里篇幅有限,就不一一列出,请把每个表的字段根据简称list出来 ”

2. 如果用左右关联的话,会多出一些数据,请根据自己的需求来确定关联选择

现在所有都问题解决了么?如果还有异常,可以贴出来一起看看

支持(0) 反对(0) 筱筱的春天 | 园豆:295 (菜鸟二级) | 2018-06-05 09:34

@筱筱的春天: 是的,可以  表名.field 列出所有需要查询得字段 才是比较规范的写法

支持(0) 反对(0) good_idea | 园豆:74 (初学一级) | 2018-06-05 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册