【问题标题】:MySQL 'WHERE' clause which excludes results in subqueryMySQL 'WHERE' 子句排除子查询中的结果
【发布时间】:2012-01-31 22:24:33
【问题描述】:

我有以下 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')

组织 7 中有 3 名成员:

     - member_ID 1
     - member_ID 4
     - member_ID 6

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

谢谢!

【问题讨论】:

    标签: mysql subquery


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      相关资源
      最近更新 更多