2017-03-31 23 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