2013-10-16 110 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