如果标题有点令人困惑,我很抱歉。希望这个描述会有所帮助。
我的网站上有一个记录页面浏览量的数据库表。每条记录都标有用户IP地址和访问时间(以及其他详细信息)。
我有另一个单独的数据库表,其中包含将用于测试等的 IP地址列表。
我想在第一个表中选择总访问次数,但仅限于在另一个表中找不到IP地址时。这样我就可以自动隐藏测试数据。
这在一个查询中是否可行,或者我是否必须检索所有结果,然后根据测试IP地址分别检查每个结果?
非常感谢。
答案 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