我有一个表,其中包含来 self 运行的多个网站的 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' ?????
我希望我已经说清楚了。
非常感谢。
最佳答案
在对每个 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
关于MySQL查询以选择列在整个结果集中具有两个值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809163/