sql从视图中的4个表中选择

kt06eoxx  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(415)

这就是问题所在,我有4张table:

  1. idbook ISBN title sinopse pages lang code year edition idedit
  2. 1 EC2 somet thing 34 ES Ec2 2011 1 1
  3. 2 EC3 more things 545 ES Ec4 2012 2 2
  4. 3 EC4 lots ofthing 323 EN Uk1 2014 1 1

社论

  1. idedit name country web
  2. 1 Pearson USA www.pearson.com
  3. 2 Pretince UK www.pretince.com

作者

  1. idaut name country bio
  2. 1 George USA lorem ipsum
  3. 2 Jeff UK dolor sit amet

作者

  1. idbook idaut order
  2. 1 1 2
  3. 2 2 5
  4. 3 1 7

所以,我需要一个视图,只显示符合es lang的元素,按年份排序。对于每一本书,你需要显示:年份,标题,isbn,版本,编辑姓名和作者姓名。没有问题的名称编辑和秩序,但我不知道如何获得作者的名字。authory是书和作者中间的一个表。这是我目前的代码:

  1. create view `INFORMATICS` as
  2. (select l.year, l.title, l.isbn, l.edition, e.name
  3. from books l
  4. inner join editorial e on e.idedit=l.idedit
  5. where lang = 'ES'
  6. )

选择到这一点是好的,但我如何才能添加作者的名字?例如a.name以获得如下表:

  1. year title ISBN edition editorial_name author_name
  2. 2011 somet EC2 1 Pearson George
  3. 2012 more EC3 2 Pretince Jeff
piztneat

piztneat1#

尝试以下方法,你必须加入 authorybooks 获取作者id idaut 然后加入 authoryauthor 获取作者姓名。

  1. create view `INFORMATICS` as
  2. (select
  3. l.year,
  4. l.title,
  5. l.isbn,
  6. l.edition,
  7. e.name,
  8. a.name
  9. from books l
  10. inner join editorial e
  11. on e.idedit=l.idedit
  12. inner join authory ar
  13. on l.idbook=ar.idbook
  14. inner join author a
  15. on ar.idaut=a.idaut
  16. where lang = 'ES'
  17. order by l.year
  18. )
展开查看全部
olhwl3o2

olhwl3o22#

你可以像普通table一样使用它
但您需要在视图中添加另一个列,即idbook

  1. create view `INFORMATICS` as
  2. (select l.idbook ,l.year, l.title, l.isbn, l.edition, e.name
  3. from books l
  4. inner join editorial e on e.idedit=l.idedit
  5. where lang = 'ES'
  6. )

然后选择“内部联接”

  1. SELECT * FROM INFORMATICS i
  2. INNER JOIN authory au
  3. ON i.idbook=au.idbook
  4. INNER JOIN author a
  5. ON au.idaut=a.idaut
  6. WHERE a.name ='Arthur';

正如草莓正确指出的那样,视图有一些限制,包括不能使用索引,因此当您直接使用索引时,它的速度可能会慢一些

展开查看全部

相关问题