如果标题有点混乱,我很抱歉。希望这个描述会有所帮助。
我在我的网站上有一个记录页面浏览量的数据库表。每条记录都标有用户 IP 地址和访问时间(以及其他详细信息)。
我有另一个单独的数据库表,其中包含将用于测试等的IP 地址列表。
我想选择第一个表中的访问总数,但前提是在另一个表中找不到 IP 地址。这样我可以自动隐藏测试数据。
这是否可以在一个查询中实现,还是我必须检索所有结果,然后根据测试 IP 地址分别检查每个结果?
非常感谢。
如果标题有点混乱,我很抱歉。希望这个描述会有所帮助。
我在我的网站上有一个记录页面浏览量的数据库表。每条记录都标有用户 IP 地址和访问时间(以及其他详细信息)。
我有另一个单独的数据库表,其中包含将用于测试等的IP 地址列表。
我想选择第一个表中的访问总数,但前提是在另一个表中找不到 IP 地址。这样我可以自动隐藏测试数据。
这是否可以在一个查询中实现,还是我必须检索所有结果,然后根据测试 IP 地址分别检查每个结果?
非常感谢。
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 提供访问计数。
您需要使用连接表,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
尝试
SELECT
count(*)
FROM
(SELECT
tbl.ip
FROM
tbl
LEFT JOIN
testingTable
ON
tbl.ip = testingTable.ip AND testingTable.ip is null)tmp
尝试左外连接:
SELECT * FROM `pageViews`
LEFT OUTER JOIN `ipAddresses` ON `pageViews`.`ipAddress = `ipAddresses`.`ipAddress`
WHERE `ipAddresses`.`ipAddress` IS NULL