2012-01-02 81 views
1

我有以下SQL查詢結果:MySQL的WHERE子句不包括在子查詢

SELECT members.member_ID, members.nick_name 
      FROM orgs 
    INNER JOIN assets ON assets.org_ID = orgs.org_ID 
    INNER JOIN orgs_to_members ON orgs_to_members.org_ID = orgs.org_ID 
    INNER JOIN members ON members.member_ID = orgs_to_members.member_ID 
    where orgs.org_ID = '7' 
    AND NOT EXISTS (select shares.member_ID from shares where shares.asset_ID = '224') 

有在有機7 3個成員:

 - member_ID 1 
    - member_ID 4 
    - member_ID 6 

在子查詢中,成員ID 1和4結果。我正在嘗試寫1將只返回成員ID#6的查詢。當我運行上述查詢時,我沒有得到任何結果。當我將它們分開時,我會得到預期的結果。請幫忙。

謝謝!

回答

6

AND NOT EXISTS (select ...)用於確保子查詢不返回任何行。它通常只在子查詢是相關的時候纔有意義(即,如果它引用了來自外部查詢的值),否則對於每個結果行它都將爲真(並且實際上不會影響查詢),或者對於每個結果行(並會導致查詢根本沒有返回結果,就像你的情況一樣)。我認爲你想要的是:

AND members.member_ID NOT IN (select shares.member_ID from shares where shares.asset_ID = '224') 
+0

就是這樣。謝謝!! – Progger 2012-01-02 16:51:42

+0

@Progger:不客氣! – ruakh 2012-01-02 17:10:37