MySQL' WHERE'在子查询中排除结果的子句

时间:2012-01-02 15:54:12

标签: mysql subquery

我有以下SQL查询:

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')

org 7中有3名成员:

     - member_ID 1
     - member_ID 4
     - member_ID 6

在子查询中,会员ID为1和4。我正在尝试编写1个查询,该查询只返回成员ID#6。当我运行上面的查询时,我没有得到任何结果。当我分开它们时,我得到了预期的结果。请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:6)

AND NOT EXISTS (select ...)用于确保子查询不返回任何行。通常只有在子查询相关时才会有意义(即,如果它引用外部查询中的值),否则它将对每个结果行都为真(并且实际上不会影响查询),或者为false每个结果行(并且将导致查询根本不返回任何结果,如您的情况)。我认为你想要的是:

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