0

这是我的数据库的架构:

id | user1 | user2 | status  //status 1 means the user is a friend
 1     1       2      1
 2     3       1      1    
 3     1       4      1
 4     2       3      1
 5     4       2      1 

在上面的例子中

  1. userId 1 有 3 个朋友 2,3,4
  2. userId 2 有 3 个朋友,即。3,4,1
  3. userId 3 有 2 个朋友,即:1,2
  4. userId 4 有 2 个朋友,即:1,2

我需要在 2 个人之间找到共同的朋友。

有任何想法吗,

4

2 回答 2

1

我不确定这是否是最好的解决方案。但也许是这样的:

SELECT
    *
FROM
(
    SELECT
        CASE WHEN t2.user1=1 THEN t2.user2 ELSE t2.user1 END AS userId
    FROM
        t AS t2
    WHERE 1 IN (t2.user1,t2.user2)
    AND t2.[status]=1
) as tbl
WHERE EXISTS 
(
    SELECT
        NULL
    FROM
        t
    WHERE 2 IN (t.user1,t.user2)
    AND tbl.userId=(CASE WHEN t.user1=2 THEN t.user2 ELSE t.user1 END)
    AND t.[status]=1
)

这会从用户 1 和 2 获得共同的朋友。这是 3,4

于 2013-02-15T12:56:20.680 回答
0

据我所见,这个查询就足够了。其中 {x} 是 userA 而 {y} 是 userB

select user2 
from friends
where user1 = {x}
and status = 1
and user2 in (
 select user2 
 from friends
 where user1 = {y}
 and status = 1
)
于 2013-02-15T13:00:18.427 回答