SQL 从视图中的 4 个表中选择
Posted
技术标签:
【中文标题】SQL 从视图中的 4 个表中选择【英文标题】:SQL select from 4 tables in a view 【发布时间】:2020-05-21 17:35:50 【问题描述】:这就是问题所在,我有这 4 个表:
书籍
idbook ISBN title sinopse pages lang code year edition idedit
1 EC2 somet thing 34 ES Ec2 2011 1 1
2 EC3 more things 545 ES Ec4 2012 2 2
3 EC4 lots ofthing 323 EN Uk1 2014 1 1
社论
idedit name country web
1 Pearson USA www.pearson.com
2 Pretince UK www.pretince.com
作者
idaut name country bio
1 George USA lorem ipsum
2 Jeff UK dolor sit amet
作者
idbook idaut order
1 1 2
2 2 5
3 1 7
所以,我需要一个仅显示与 ES lang 匹配的元素的视图,按年份排序。对于您需要显示的每本书:年份、书名、ISBN、版本、社论名称和作者姓名。 编辑名称和订单没有问题,但我不知道如何获得作者的姓名。 Authory 是位于书籍和作者中间的表格。 到目前为止,这是我的代码:
create view `INFORMATICS` as
(select l.year, l.title, l.isbn, l.edition, e.name
from books l
inner join editorial e on e.idedit=l.idedit
where lang = 'ES'
)
到目前为止的选择是好的,但是如何添加作者姓名?像一个名字 要获得这样的表格:
year title ISBN edition editorial_name author_name
2011 somet EC2 1 Pearson George
2012 more EC3 2 Pretince Jeff
【问题讨论】:
没有人需要视图 :-( 【参考方案1】:尝试以下操作,您必须加入 authory
和 books
以获取作者 ID idaut
,然后加入 authory
和 author
以获取作者姓名。
create view `INFORMATICS` as
(select
l.year,
l.title,
l.isbn,
l.edition,
e.name,
a.name
from books l
inner join editorial e
on e.idedit=l.idedit
inner join authory ar
on l.idbook=ar.idbook
inner join author a
on ar.idaut=a.idaut
where lang = 'ES'
order by l.year
)
【讨论】:
非常感谢,这就是我想的三重内连接,效果很好【参考方案2】:你可以像普通桌子一样使用它
但是您需要在视图中添加另一列,那就是 idbook
create view `INFORMATICS` as
(select l.idbook ,l.year, l.title, l.isbn, l.edition, e.name
from books l
inner join editorial e on e.idedit=l.idedit
where lang = 'ES'
)
然后是 SELECT 和 INNER JOIN
SELECT * FROM INFORMATICS i
INNER JOIN authory au
ON i.idbook=au.idbook
INNER JOIN author a
ON au.idaut=a.idaut
WHERE a.name ='Arthur';
正如草莓正确指出的那样 views 有一些限制,包括无法使用索引,所以会像直接做一样慢
【讨论】:
请注意,这(可能)不能使用索引以上是关于SQL 从视图中的 4 个表中选择的主要内容,如果未能解决你的问题,请参考以下文章