【问题标题】:How do I select clients with no valid email addresses?如何选择没有有效电子邮件地址的客户?
【发布时间】:2013-04-30 15:23:54
【问题描述】:

我有一个链接到客户联系人表的客户表。当然,许多客户可能有多个联系人。 我有一个使用 DISTINCT 的 Select 语句来显示哪些客户在客户联系人表中至少有一个电子邮件联系人。

SELECT DISTINCT intpkautoclientid
FROM   tblclient c
       JOIN tblclientcontact cc WITH (nolock)
         ON cc.intfkclientid = c.intpkautoclientid
WHERE  NULLIF(cc.stremail, '') IS NOT NULL
ORDER  BY intpkautoclientid  

有没有一种简单的方法使用上面的选择来返回不属于“具有电子邮件地址的客户”SET 的所有客户。

我真的很想知道哪些客户我没有任何有效的电子邮件地址。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT  *
    FROM    tblclient
    WHERE   intpkautoclientid NOT IN
            (
            SELECT  intfkclientid
            FROM    tblclientcontact
            WHERE   stremail > ''
            )
    

    【讨论】:

    • 当您知道如何操作时非常简单。谢谢
    【解决方案2】:

    另一种可读方式是使用NOT EXISTS:

    SELECT intpkautoclientid
    FROM   tblclient c
    WHERE NOT EXISTS
    (
       SELECT 1 FROM tblclientcontact cc 
       WHERE cc.intfkclientid = c.intpkautoclientid
    )
    

    【讨论】:

    • 是的。谢谢你。 @Quassnoi 答案的变体
    【解决方案3】:

    将您的联接更改为 left outer joinwhere 子句以测试 Nullness:

    SELECT DISTINCT intpkautoclientid
    FROM   tblclient c
           left outer JOIN tblclientcontact cc WITH (nolock)
             ON cc.intfkclientid = c.intpkautoclientid and cc.stremail is not null
    WHERE  cc.stremail is null
    ORDER  BY intpkautoclientid  
    

    另外,distinct 可能不再需要了。

    【讨论】:

    • 我认为这不会像客户有两个联系人一样有效,一个是有效的电子邮件,另一个是空的。它将返回客户端。我想要没有电子邮件信息的客户。 ???
    • @kingchris 。 . .我在写它时正在考虑这一点,但问题没有说明这种情况。在任何情况下,通过在on 子句中添加cc.stremail is not null1 很容易解决这个问题。
    • 好的。会试试的。谢谢。
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2014-06-02
    • 2011-06-28
    相关资源
    最近更新 更多