【问题标题】:Reject row from select if condition exists in another table如果条件存在于另一个表中,则拒绝选择行
【发布时间】:2011-07-09 05:51:16
【问题描述】:

我有两张桌子。

  1. 联系人表 - contact_id、contact_email、contact_name 等
  2. 退出表 - 联系人电子邮件、退出范围(事件、公司)

所以一个联系人可能有多个事件选择退出,但我真正关心的是他们是否有全公司范围的选择退出。

如何加入数据,以便如果联系人与 optout 表中具有“公司”范围的任何行匹配,则它不会显示在结果中?

【问题讨论】:

    标签: mysql join


    【解决方案1】:
    SELECT c.*
        FROM Contacts c
        WHERE NOT EXISTS(SELECT NULL
                             FROM OptOut o
                             WHERE c.contact_email = o.contact_email
                                 AND o.scope = 'company')
    

    这也可以通过LEFT JOIN 来完成:

    SELECT c.*
        FROM Contacts c
            LEFT JOIN OptOut o
                ON c.contact_email = o.contact_email
                    AND o.scope = 'company'
        WHERE o.contact_email IS NULL
    

    【讨论】:

      【解决方案2】:

      select * from contacts where contact_email not in(select contact_email from optout where scope = 'company');

      【讨论】:

        猜你喜欢
        • 2014-02-21
        • 2018-08-20
        • 2020-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多