关于多连接语法SQL/NoSQL的澄清
我正在研究NoSQL数据库,遇到了一种情况,它显示了在关系数据库中存储连接数据的复杂性。以下是表格结构: 这两个问题是: 谁是鲍勃的朋友:关于多连接语法SQL/NoSQL的澄清,sql,sql-server,join,relationship,nosql,Sql,Sql Server,Join,Relationship,Nosql,我正在研究NoSQL数据库,遇到了一种情况,它显示了在关系数据库中存储连接数据的复杂性。以下是表格结构: 这两个问题是: 谁是鲍勃的朋友: SELECT p1.Person FROM Person p1 JOIN PersonFriend ON PersonFriend.FriendID = p1.ID JOIN Person p2 ON PersonFriend.PersonID = p2.ID WHERE p2.PERSON = 'Bob' 谁是鲍勃的朋友 SELECT p1.Perso
SELECT p1.Person
FROM Person p1 JOIN PersonFriend
ON PersonFriend.FriendID = p1.ID
JOIN Person p2
ON PersonFriend.PersonID = p2.ID
WHERE p2.PERSON = 'Bob'
谁是鲍勃的朋友
SELECT p1.Person
FROM Person p1 JOIN PersonFriend
ON PersonFriend.PersonID = p1.ID
JOIN Person p2
ON PersonFriend.FriendID = p2.ID
WHERE p2.PERSON = 'Bob'
我想我非常理解join,但是我在理解给定需求的两个ON子句之间的联系时遇到了一些困难。这两个查询都是相同的
例如,考虑第一个查询:要获得Bob的朋友,我需要执行以下操作:
PersonFriend
获取FriendID
,其中personID
为2。这将提取Bob的朋友(personID为2的子句由执行,其中p2.person=Bob
)
Person
获取Person
(姓名),其中人员的ID
等于步骤1中返回的FriendID
的语法与第一个查询相反。我的意思是,我可以理解查询“谁是Bob的朋友”是“谁是Bob的朋友”的反义词,但我无法用SQL查询来可视化这种关系
任何帮助都将不胜感激 PersonFriend
表格应该告诉我:这个PersonID
有这个FriendID
朋友。否则就有问题了。如果这个条件是正确的,那么您的查询是好的
你基本上只是在说:
第一个问题:
从表Person p1
中获取这些行,其中表PersonFriend
中的列FriendID
等于p1.ID
(所有匹配),而表PersonFriend
中的列PersonID
仅等于Person p2
Person
因此,您只能从PersonFriend
中获得这些行,其中'Bob'
作为PersonID
当您将'Bob'
设置为FriendID
,而不是PersonID
时,您显然得到了所有与'Bob'
匹配的FriendID
我希望您现在能理解:)但是PersonFriend会将所有友谊存储两次。。。为什么?我不知道你是什么意思?你指的是PersonFriend中的前两行,它有1和2,然后是2和1?这是因为第一行表示2是1的朋友,第二行表示1是2的朋友。或者我想是这样,没错。p1可以和p2成为朋友,但p2不能和p1成为朋友吗?是的,例如:99(扎克)是2(鲍勃的)朋友,但2不是99的朋友。我只是很难将其转换为连接条件!但这正是查询的编写方式。。。那有什么问题