如何跨多个表查询

时间:2017-12-04 15:47:26

标签: sql join

我有以下数据库。这是一个正确的查询,以获得成员借出的作者的名字?还是有更有效的方式?

select M.MemberNo, A.FirstName
from Person.Members as M
INNER JOIN Booking.Loans as L
on M.MemberNo = L.MemberNo
INNER JOIN Article.Copies as C
on L.ISBN = C.ISBN and L.CopyNo = C.CopyNo
INNER JOIN Article.Items as I
on C.ISBN = I.ISBN
INNER JOIN Article.Titles as T
on I.TitleID = T.TitleID
INNER JOIN Article.TitleAuthors as TA
on T.TitleID = TA.TitleID
INNER JOIN Article.Authors as A
on TA.AuthorID = A.AuthorID
;
go

enter image description here

1 个答案:

答案 0 :(得分:1)

获取借给会员的书籍作者姓名的最直接方式是这样的:

  1. 获取会员贷款(Booking.Loans)
  2. 获取会员贷款账簿(Article.Items)
  3. 获取会员贷款账簿的作者(Article.TitleAuthors)
  4. 为会员贷款账簿(Article.Authors)获取作者的名字
  5. ConnectionString

    像您拥有原始查询一样加入所有表的好处是确保每个中间表都被正确地插入或删除。

    例如,如果成员有贷款(即Loans表中的一行),则原始查询不会返回成员的任何行,但由于某种原因,在Members表中没有条目。如果你可以假设(或者不关心)如果Loans表中有一行,那么在Members表中总会有一行,那么你可以将连接排除在Person.Members之外。

    如果需要,您也可以将相同的逻辑应用于其他中间表(成员,副本,标题)。但是,如果您需要来自其中一个表的特定数据,那么您需要将它们包含在连接中。