选择多列不包含值的位置

时间:2015-11-06 16:46:12

标签: sql select

我有一张表有3个电子邮件列。我们不想显示默认的电子邮件地址(为简单起见,我们称之为name@example.com)。如果select语句遇到第一封电子邮件,则使用第二封电子邮件,依此类推。我只需要遇到第一封不是name@example.com的电子邮件。如果所有三个都是该地址,则不返回记录。

作为快速测试我试过

SELECT * 
FROM participant 
WHERE primaryEmail <> 'name@example.com' 
  AND secondaryEmail <> 'name@example.com' 
  AND ternaryEmail <> 'name@example.com'

这并不好,因为如果输入的记录缺少的电子邮件比插入的name@example.com少,那么我会接收从不包含该电子邮件的记录。

修改

我需要指定select语句将使用的唯一记录是name和查询找到的任何电子邮件。

2 个答案:

答案 0 :(得分:1)

您可以在查询中尝试OR而不是AND。这样,您就可以获得至少有一封电子邮件有效的条目。

答案 1 :(得分:1)

使用CASE中的SELECT选择第一个非'name@example.com'并将WHERE更改为使用OR可以解决您的问题。< / p>

SELECT
    name, 
    CASE
        WHEN primaryEmail <> 'name@example.com' THEN primaryEmail
        WHEN secondaryEmail <> 'name@example.com' THEN secondaryEmail 
        ELSE ternaryEmail 
    END AS email
FROM participant 
WHERE 
    primaryEmail <> 'name@example.com' 
    OR secondaryEmail <> 'name@example.com' 
    OR ternaryEmail <> 'name@example.com'