2013-05-31 60 views
0

如果標題有點令人困惑,我很抱歉。希望這個描述會有所幫助。當在其他表中找不到字段匹配時,從一個表中選擇總計數

我有一個數據庫表記錄頁面瀏覽量在我的網站上。每條記錄都印有用戶IP地址和訪問時間(以及其他詳細信息)。

我有一個包含將被用於測試的IP地址列表,另一個單獨的數據庫表等

我想在第一個表中選擇訪問的總數但只當在其他表中找不到IP地址時。這樣我可以自動隱藏測試數據。

這是可能在一個查詢或我將不得不檢索所有結果,然後單獨檢查每個測試IP地址?

非常感謝。

回答

4
select t1.ip, count(t1.timestamp) 
from t1 
left outer join t2 on t1.ip = t2.ip 
where t2.ip is null 
group by t1.ip 

將給出每個不在另一個表中的IP的訪問計數。

+0

真棒這是完美的感謝,我會慶祝只要它能讓我回答! – chapmanio

2

您需要使用LEFT JOIN加入表格,因爲您要計入其他表格中不存在的IPAdd

SELECT a.IPAdd, COUNT(a.IPAdd) totalCount 
FROM Table1 a 
     LEFT JOIN Table2 b 
      ON a.IPAdd = b.IPAdd 
WHERE b.IPAdd IS NULL 
GROUP BY a.IPAdd 

另外,您也可以使用NOT EXISTS

SELECT a.IPAdd, COUNT(a.IPAdd) totalCount 
FROM Table1 a 
WHERE NOT EXISTS 
     (
      SELECT null 
      FROM Table2 b 
      WHERE a.IPAdd = b.IPAdd 
     ) 
GROUP BY a.IPAdd 
2

嘗試

SELECT 
    count(*) 
FROM 
    (SELECT 
     tbl.ip 
    FROM 
     tbl 
    LEFT JOIN 
     testingTable 
    ON 
     tbl.ip = testingTable.ip AND testingTable.ip is null)tmp 
2

嘗試左外連接:

SELECT * FROM `pageViews` 
LEFT OUTER JOIN `ipAddresses` ON `pageViews`.`ipAddress = `ipAddresses`.`ipAddress` 
WHERE `ipAddresses`.`ipAddress` IS NULL 
相關問題