Kar*_*rlo 1 mysql sql join group-by subquery
运行此查询需要很长时间:
SELECT host,ip FROM arecords WHERE ip IN
(SELECT ip FROM arecords GROUP BY ip HAVING COUNT(ip)>1 )
;
Run Code Online (Sandbox Code Playgroud)
(在我的arecords表中,有时IP上有多个主机.对于这些情况,我想得到主机名+ ip)
我觉得子查询运行了很多次.如果我运行子查询,取结果,并用这些结果替换子查询,它很快.我发现我可以通过使用视图来避免这种情况.
有没有办法用一个查询做到这一点?
[示例SQL结果我想要的结果:http://sqlfiddle.com/#!2/6c1bd/1/0 ]
试试这个解决方案 这将多次检索表中存在的每个ip的所有行.这使用了一个子选择FROM,它被执行一次 - 而不是每个外行执行一次的子查询WHERE.
ip选择s 后,您将加入同一个表,其中该表ip等于ip在子选择中FROM选择的表.连接应该很快,因为它将在索引上发生,最终结果是它将仅为表中具有多个值的s 获得hosts + ips ip:
SELECT
b.host,
b.ip
FROM
(
SELECT ip
FROM arecords
GROUP BY ip
HAVING COUNT(*) > 1
) a
INNER JOIN
arecords b ON a.ip = b.ip AND b.active = 'T'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |