我有以下数据库。这是一个正确的查询,以获得成员借出的作者的名字?还是有更有效的方式?
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
答案 0 :(得分:1)
获取借给会员的书籍作者姓名的最直接方式是这样的:
ConnectionString
像您拥有原始查询一样加入所有表的好处是确保每个中间表都被正确地插入或删除。
例如,如果成员有贷款(即Loans表中的一行),则原始查询不会返回成员的任何行,但由于某种原因,在Members表中没有条目。如果你可以假设(或者不关心)如果Loans表中有一行,那么在Members表中总会有一行,那么你可以将连接排除在Person.Members之外。
如果需要,您也可以将相同的逻辑应用于其他中间表(成员,副本,标题)。但是,如果您需要来自其中一个表的特定数据,那么您需要将它们包含在连接中。