根据以下样本数据,假设Julie(1)有朋友Adam,David,John(2,3,4).
亚当(2)有朋友朱莉,大卫,约翰(1,4).
亚当(2)有朋友朱莉,大卫,约翰(1,4).
ID Name 1 Julie 2 Adam 3 David 4 John 5 Sam
这使得一个表中的自连接和多对多关系成为可能.
除了上述问题之外,Julie(1)还说Sam(5)是朋友,从技术上和实际上讲,Sam(5)现在也是Julie(1)的朋友.这使得事情变得更加复杂,因为这种关系是双向的.
所以我想知道:
>我如何设计数据库?
>如何进行将返回每个用户的所有朋友的查询?
谢谢!
解决方法
示例数据:
PEOPLE PERS_ID PERS_NAME 1 Julie 2 Adam 3 David 4 John 5 Sam FRIENDSHIPS PERS_ID FRIEND_ID 1 2 1 3 1 4 2 3 2 4
查询:
select people.pers_id as person,people.pers_name as person_name,peoplef.pers_id as friend_id,peoplef.pers_name as friend_name from people join friendships on people.pers_id = friendships.pers_id or people.pers_id = friendships.friend_id join people peoplef on (peoplef.pers_id = friendships.pers_id and peoplef.pers_id <> people.pers_id) or (peoplef.pers_id = friendships.friend_id and peoplef.pers_id <> people.pers_id) order by 2,4
sql小提琴演示:http://sqlfiddle.com/#!2/97b41/6/0
无论您是否在友谊表上记录两个方向,这都将有效.
原文地址:https://www.jb51.cc/mssql/77167.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。