1

在具有用户和朋友表的关系数据库中,我试图确定成对的异性用户是朋友。因此,用户 a 可能与用户 b 成为朋友,但反之则不然。我想找到 a 是 b 的朋友并且 b 也是 a 的朋友的所有实例。我有一个查询将所有单向友谊返回给异性,但我不确定如何进一步减少答案以取出不匹配的配对。

这是表的结构:

Table: users
Attributes: id, name, gender
Table: friends
Attributes: id1, id2, startdate
4

2 回答 2

2

要找到所有相互的 MF 友谊,假设性别总是 M 或 F:

select distinct a.name, a.id, b.name, b.id
from users a, users b, friends f1, friends f2
where f1.id1 = a.id
and f1.id2 = b.id
and a.gender != b.gender
and f2.id1 = b.id
and f2.id2 = a.id;

或者,使用 ANSI 连接语法:

select distinct a.name, a.id, b.name, b.id
from   friends f1
join   friends f2 on f1.id1 = f2.id2 and f1.id2 = f2.id1
join   users a    on a.id = f1.id1
join   users b    on b.id = f1.id2
where  a.gender != b.gender;
于 2013-10-16T06:00:33.690 回答
0

使用INTERSECT而不是UNION. 您想要两个子查询中都存在的记录。(您可能也不需要DISTINCTs 。)

于 2013-10-16T06:00:57.463 回答