我试图通过朋友表获得一组“共同的朋友”:
然后我想从用户表中选择* WHERE userId在公共集中的朋友中。
朋友
.ID ... ... DOM子
0.1 ..... ..... 2个1个
0.2 ..... ..... 1个3个
0.3 ..... ..... 1个4个
0.4 ..... ..... 1个5个
0.5 ..... ..... 2个4个
0.6 ..... ..... 2个6个
0.7 ..... ..... 3个2个
0.8 ..... ..... 3个6个
.9 ..... 2 ..... 3
用户
.ID .... FNAME LNAME ...
0.1 .....安.....狐狸
0.2 .....抢.....史密斯
0.3 .....艾米.....奥康纳
0.4 .....标志....棕色
0.5 .....插孔....休斯
.6 ..... sian .... jong
从上表中可以看出 ann(user_1)是2,3,4和5的朋友...而rob(user_2)是1,3,4和6的朋友。
但是如何编写一个查询来从两个给定用户之间的usersTable,共同朋友中获取userIds?
我觉得它与UNION有关,但欢迎任何消息......
谢谢你们
答案 0 :(得分:2)
这是我想出的:
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 =朋友的朋友。我从“左”用户开始,找到他的朋友,找到与“正确”用户匹配的朋友。
最后的“不在”是让我们不要去“艾米是_的朋友,是艾米的朋友”。