2013-10-16 79 views
0

正如我在另一个问题中提到的,我正在为学校处理小型关系数据库查询。此查询是为了找到有女性朋友的男性用户。 这里是数据库的相关结构具有多个表的Oracle sql查询

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是女性。

谢谢

+0

如果我开始我的回答有“正如我在昨天的梦想解答您的问题......”,只是说。 ... – Chandu

+0

昨天我看到了这个问题...我正在阅读这个想法,我没有读过这个吗? –

回答

2

试试这个(假设> =甲骨文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) 
+0

我解决了它稍微不同,但测试你的方法,它看起来不错。我用:从用户a,用户b,朋友 选择a.id ,其中id1 = a.id和a.gender ='M',id2 = b.id和b.gender ='F'; – user1814946