2013-05-14 49 views
-2

SELECT部门FROM mytable的WHERE接触IS NULL我怎样才能在mysql用例外选择

Department Contact 
    ------------- --------- 
    Cleaning  Jack 
    Admin   Peter 
    Software  James 
    Cleaning  (null) 
    Cleaning  Jill 
    Hardware  (null) 

在上表中,如何选择部门,在那里接触是空排除存在接触。

以上声明 将返回“清洗”和“硬件”。

我的预期是什么只有“硬件”

我怎么可以只选择“硬件”还是可能的。

TIA

+2

'WHERE contact IS NULL AND departement ='Hardware'' ..? – user2246674 2013-05-14 04:30:56

回答

1

这听起来像你想排除与任何记录一个非空值相关部门。为此,您应该执行子查询来获取所有非空的部门,并从检索空部门的查询中排除它们。像这样:

SELECT DISTINCT department 
FROM mytable 
WHERE contact is null 
AND department NOT IN (SELECT department FROM mytable where contact is not null) 
2

我想你只想返回没有任何非空联系人的行。

SELECT 
    DISTINCT department 
FROM 
    myTable 
WHERE 
    contact IS NULL 
    AND department NOT IN (SELECT department FROM myTable where contact IS NOT NULL) 

,或者,如果你想这样做没有IN条款:

SELECT 
    DISTINCT a.[department] 
FROM 
    myTable AS a 
LEFT OUTER JOIN 
    myTable AS b 
     ON b.[department] = a.[department] 
     AND b.[contact] IS NOT NULL 
WHERE 
    a.[contact] IS NULL 
    AND b.[contact] IS NULL 

自联接使用NOT NULL为条件,然后验证JOIN未能在WHERE子句中的NULL检查。

+0

我的答案在几秒钟之前就已完成,但你的格式更好。这是一种折腾。 – octern 2013-05-14 04:36:46

+0

@octern nah,你可以拥有它:D我会试着重做它,而不用'NOT IN' – Matthew 2013-05-14 04:37:08

+0

我会感兴趣的,看看你是怎么做到的!我知道子查询被认为比自连接更不优雅,所以这里可能有更好的解决方案。 – octern 2013-05-14 04:37:57

0
SELECT department, 
     SUM(CASE WHEN Contact is not null THEN 1 ELSE 0 END) as count 
     from myTable 
     group by department 
     HAVING count > 0 ; 
+0

-1,而不是解决方案。 – Matthew 2013-05-14 04:44:09

+0

@马修看到我更新我的回答 – PSR 2013-05-14 04:46:44

+0

仍然没有好处,这会检查NULL部门,而不是联系人...然后需要第二步消除。 – Matthew 2013-05-14 04:48:04