让我们看一些非常简单的例子,有3个表:
如果有人的话,需要选择所有带宠物的人....在最终的应用程序中,它应该看起来像:
最有效的方式:
答案 0 :(得分:1)
最有效的方法是一次性选择它们:
select p.*, pt.*
from Person p
left outer join PersonPet pp on p.PersonId = pp.PersonId
left outer join Pet pt on pp.PetId = pt.PetId
答案 1 :(得分:0)
如果有人的话,需要选择所有带宠物的人......
使用:
SELECT per.name,
per.surname,
pt.name
FROM dbo.PERSON per
LEFT JOIN dbo.PERSONPET perpet ON perpet.personid = per.personid
JOIN dbo.PETS pt ON pt.petid = perpet.petid
答案 2 :(得分:0)
我个人会把它作为sql server上的存储过程。无论你采用哪种方式,出于显示目的,你将不得不过滤掉重复的姓名和姓氏。
答案 3 :(得分:0)
检索记录所花费的大部分时间用于设置和拆除对数据库的查询。在查询中使用了多少数据或多少个表并没有多大区别。使用单个查询获取所有数据会更有效。如果您的数据访问层分别获取每个数据,则速度会很慢。绝对使用连接。
答案 4 :(得分:0)
如果您的客户端和后端支持多个结果集,您也可以做类似的事情(假设其MSSQL)
Create Proc usp_GetPeopleAndPets
AS
BEGIN
SELECT PersonId, Name, Surname
FROM
dbo.Person p;
SELECT
pp.PersonID,
p.PetId, p.Name, p.Breed
FROM
dbo.PersonPet pp
INNER JOIN dbo.Pet p
ON pp.PetId = p.PetId
Order BY pp.PersonId
END
数据检索时间与数据库的一次访问大致相同。一些客户支持结果之间的关系,允许您执行类似的操作 Person.GetPets()或Pet.GetPerson()
这种方法的主要优点是,如果你与人合作,你不必担心“过滤所有人复制[s]”