mySQL“;“共同的朋友”;查询

mySQL“;“共同的朋友”;查询,mysql,Mysql,我试图通过Friends表获得一组“共同的朋友”: 然后我想从users表中选择*,其中userId位于friends in common集合中 朋友们 .id…dom…sub .1…..2…..1 .2…..1…..3 .3…..1…..4 .4…..1…..5 .5…..2…..4 .6…..2…..6 .7…..3…..2 .8…..3…..6 .9…..2…..3 用户 .id…fname…lname .1…..安…..福克斯 .2…..罗布…..史密斯 .3…..艾米…..奥康纳 .4

我试图通过Friends表获得一组“共同的朋友”:

然后我想从users表中选择*,其中userId位于friends in common集合中

朋友们
.id…dom…sub
.1…..2…..1
.2…..1…..3
.3…..1…..4
.4…..1…..5
.5…..2…..4
.6…..2…..6
.7…..3…..2
.8…..3…..6
.9…..2…..3

用户
.id…fname…lname
.1…..安…..福克斯
.2…..罗布…..史密斯
.3…..艾米…..奥康纳
.4.…标记…棕色
.5…杰克…休斯
.6.……西安……钟

从上面的表格可以看出 安(用户_1)是2、3、4和5的朋友。。。rob(用户_2)是1、3、4和6的朋友

但是,我如何编写一个查询来从两个给定用户之间的用户稳定的、共同的朋友中获取用户ID呢

我有一种感觉,这与工会有关,但欢迎任何建议


谢谢大家

以下是我的想法:

SELECT distinct fic.* from users l
JOIN friends fol ON (fol.dom=l.id OR fol.sub=l.id)
JOIN users fic ON (fol.dom=fic.id OR fol.sub=fic.id)
JOIN friends fofic ON (fofic.dom=fic.id OR fofic.sub=fic.id)
JOIN users r ON (r.id=fofic.dom OR r.id=fofic.sub)
WHERE r.id=1 AND l.id=2 AND fic.id NOT IN (1,2);
我将表格别名为fic=共同的朋友,fofic=共同的朋友的朋友。我从“左”用户开始,找到他的朋友,找到与“右”用户匹配的朋友

最后一个“不在”是阻止我们说“艾米是……的朋友,她是艾米的朋友”