我有一个表格,其中包含我运行的多个网站的IP数据,其中我使用SiteCode列来识别哪些数据来自哪个网站:
ID SiteCode IP Page
-- -------- -- ----
1 BHS 192.168.1.1 index.php
2 ED 192.168.4.4 index.php
3 BHS 192.168.1.1 index.php
4 ED 192.168.1.1 index.php
我想要做的是弄清楚我如何只选择那些在行结果集中同时包含(而非)BHS和ED行的SiteCodes的IP号码:
SELECT * FROM `ip-tracking` WHERE `IP`='192.168.1.1' ?????
我希望我已经清楚了。
非常感谢提前。
答案 0 :(得分:0)
在对每个IP地址进行分组时使用条件聚合,您可以检查以确保IP与这两种类型的站点代码相关联:
SELECT IP
FROM yourTable
GROUP BY IP
HAVING SUM(CASE WHEN SiteCode = 'BHS' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN SiteCode = 'ED' THEN 1 ELSE 0 END) > 0
如果BHS
和ED
是表中唯一出现的两个网站代码,那么HAVING
子句可以简化为:
HAVING COUNT(DISTINCT SiteCode) = 2