gpt4 book ai didi

Mysql查询匹配2个条件

转载 作者:行者123 更新时间:2023-11-29 09:27:37 27 4
gpt4 key购买 nike

我有一个如下表,想要查找至少有 1 个 200 和 404 响应实例的所有 IP。我试图通过联接或递归查询来实现此目的,但无法获得正确的输出。预期输出:1.5.10.15。请指教。

+-----------------+------------+----------+
| ip | statuscode |id(primary)|
+-----------------+------------+----------+
| 1.2.3.4 | 200 | 1 |
| 1.3.5.9 | 404 | 2 |
| 2.4.6.8 | 404 | 3 |
| 1.2.3.4 | 200 | 4 |
| 2.4.6.8 | 301 | 5 |
| 1.3.5.9 | 301 | 6 |
| 1.5.10.15 | 404 | 7 |
| 1.5.10.15 | 200 | 8 |

最佳答案

您可以使用聚合:

select ip
from t
where statuscode in (200, 404)
group by ip
having min(statuscode) <> max(statuscode);

我想不出使用联接的更好方法,而递归子查询似乎对此毫无用处。

如果您有一个单独的 ip 表(这似乎是可能的),那么 exists 可能是最有效的方法:

select i.*
from ips i
where exists (select 1
from statuses s
where s.ip = i.ip and s.statuscode = 404
) and
exists (select 1
from statuses s
where s.ip = i.ip and s.statuscode = 200
);

为此,您需要在 statuses(ip, statuscode) 上建立索引。

关于Mysql查询匹配2个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com