当找不到与另一个表匹配的字段时,从一个表中选择总计数

时间:2013-05-31 11:46:51

标签: mysql

如果标题有点令人困惑,我很抱歉。希望这个描述会有所帮助。

我的网站上有一个记录页面浏览量的数据库表。每条记录都标有用户IP地址和访问时间(以及其他详细信息)。

我有另一个单独的数据库表,其中包含将用于测试等的 IP地址列表。

我想在第一个表中选择总访问次数,但仅限于在另一个表中找不到IP地址时。这样我就可以自动隐藏测试数据。

这在一个查询中是否可行,或者我是否必须检索所有结果,然后根据测试IP地址分别检查每个结果?

非常感谢。

4 个答案:

答案 0 :(得分: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提供访问次数。

答案 1 :(得分: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 :(得分:2)

尝试

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

答案 3 :(得分:2)

尝试左外连接:

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