2012-01-02 380 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