3

我有一张表,上面有几个用户的 id 和他们各自的朋友 ID,我想看看谁有共同的朋友。

例如,1 是 Roger 的 ID,2 是 Matt 的 ID。

表友字段/值:

ID, FRIEND_ID, FRIEND_NAME

1, 34, DAMON

1, 17, RICHARD

1, 56, DANIEL

1, 65, CHARLIE

2, 15, PRISCILA

2, 17, RICHARD

2, 45, JOHN

2, 56, DANIEL

我想创建一个 ID 为 1 和 2 的选择,这将返回具有共同 FRIEND_ID 的行(意味着 Roger 和 Matt 有共同的朋友),在这种情况下,它将返回带有friend_id RICHARD 和 DANIEL 的列,最好不要重复。

4

2 回答 2

4

这应该工作,

Select f1.FRIEND_ID,f1.FRIEND_NAME from 
FRIENDS f1,FRIENDS f2 where f1.FRIEND_ID =f2.FRIEND_ID and 
f1.id=1 and f2.id=2

这是示例: http ://sqlfiddle.com/#!2/c9f36/1/0

如果你想让所有人都有共同的朋友,试试这个

Select f1.FRIEND_ID,f1.FRIEND_NAME,f1.id 'first person',f2.id as 'second person' from 
FRIENDS f1,FRIENDS f2 where f1.FRIEND_ID =f2.FRIEND_ID and 
f1.id<>f2.id and f1.id<f2.id

这将返回每行有相同朋友的两个人:http ://sqlfiddle.com/#!2/c9f36/2/0

于 2012-08-26T19:20:41.223 回答
3
SELECT friend_id, friend_name
FROM friends
WHERE id IN (1, 2)
GROUP BY friend_id
HAVING COUNT(*) > 1

演示

于 2012-08-26T19:27:25.663 回答