0

如果标题有点混乱,我很抱歉。希望这个描述会有所帮助。

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

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

我想选择第一个表中的访问总数,但前提是在另一个表中找不到 IP 地址。这样我可以自动隐藏测试数据。

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

非常感谢。

4

4 回答 4

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 提供访问计数。

于 2013-05-31T11:48:27.957 回答
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
于 2013-05-31T11:49:04.637 回答
2

尝试

SELECT 
    count(*) 
FROM 
    (SELECT
        tbl.ip
    FROM
        tbl
    LEFT JOIN 
        testingTable
    ON
        tbl.ip = testingTable.ip AND testingTable.ip is null)tmp
于 2013-05-31T11:50:37.800 回答
2

尝试左外连接:

SELECT * FROM `pageViews`
LEFT OUTER JOIN `ipAddresses` ON `pageViews`.`ipAddress = `ipAddresses`.`ipAddress`
WHERE `ipAddresses`.`ipAddress` IS NULL
于 2013-05-31T11:50:53.317 回答