0

正如我在另一个问题中提到的,我正在为学校处理小型关系数据库查询。这个查询是寻找有女性朋友的男性用户。下面是数据库的相关结构

Table: Users
Attributes: Id_pk, Name, Gender

Table: Friends
Attributes: Id1_pk (fk to users.id), Id2_pk (fk to users.id),Startdate

我正在尝试使用此查询来解决此查询:

select distinct id from friends, users, where users.id = id1 and users.gender = 'M'
intersect
select id from friends, users where users.id = id2 and users.gender = 'F'

所以这是一个有效的搜索,但没有选择任何行,尽管我在数据库中肯定有男性和女性之间的朋友。我想我遇到了一个问题,我要检查相同的 users.gender 两次,但我不知道如何解决它。我构建这个查询的想法是尝试检查插槽 id1 和 id2 中的人的性别,确保 id1 是男性,id2 是女性。

谢谢

4

1 回答 1

2

试试这个(假设 >=Oracle 9x):

 WITH FemalesQuery AS
(
    SELECT Id_pk
      FROM Users
     WHERE Gender = 'F'
), MalesQuery AS
(
    SELECT Id_pk
      FROM Users
     WHERE Gender = 'M'
)

SELECT Id2_pk
  FROM Friends
 WHERE Id1_pk IN (SELECT Id_pk FROM FemalesQuery)
   AND Id2_pk IN (SELECT Id_pk FROM MalesQuery)
 UNION
 SELECT Id1_pk
  FROM Friends
 WHERE Id2_pk IN (SELECT Id_pk FROM FemalesQuery)
   AND Id1_pk IN (SELECT Id_pk FROM MalesQuery)
于 2013-10-16T00:37:41.667 回答