2017-03-31 92 views
0

希望我能形容这只是如果不是我会尽力做一个表吧:说我有,通过跟踪所有访问我的商店表顾客姓名。我记录他们的姓名和购买金额(如果有的话)。我想得到一个从不买东西的游客名单。所以,如果我有找到所有的客户记录,所有的记录在价格领域有NULL值

VisitorName PurchaseAmount

Bob 10

Bob NULL

Mary NULL

Mary NULL

我想返回Mary查询,是因为她所有的记录都NULLPurchaseAmount

回答

0

你可以使用具有值不为空一个不是在子查询的VisitorName

select distinct visitorName from my_table 
where visitorName not in (select VisitorName 
        from my_table where PurchaseAmount is not null) 
+0

有趣哪些检查是中间选择工作正常,但外部选择得到一个空集。我手动检查,并有许多客户的所有订单都是NULL,所以它不是数据。 – user3649739

+0

解释更好..这个查询很简单,所以你可以很容易测试..如果不工作显示我参与的价值..,(检查你是否有空值(非空) – scaisEdge

+0

我要删除我上面的​​评论时我发现我的错误,但认为它可能对未来的某个人有所帮助;我有一个记录,其中CustomerName是NULL,导致Empty Set从外部选择,现在很好用! – user3649739

1

创建表/插入数据

CREATE TABLE visits 
    (`VisitorName` VARCHAR(4), `PurchaseAmount` VARCHAR(4)) 
; 

INSERT INTO visits 
    (`VisitorName`, `PurchaseAmount`) 
VALUES 
    ('Bob', '10'), 
    ('Bob', NULL), 
    ('Mary', NULL), 
    ('Mary', NULL) 
; 

查询

在VisitorName上只是GROUP BY。 并且a有如果所有的记录都是空的

SELECT 
visits.VisitorName 
FROM 
visits 
GROUP BY 
    visits.VisitorName 
HAVING 
SUM(CASE 
     WHEN visits.PurchaseAmount IS NULL 
     THEN 1 
    END 
) = COUNT(*) 

结果

VisitorName 
------------- 
Mary