运行此查询需要很长时间:
SELECT host,ip FROM arecords WHERE ip IN
(SELECT ip FROM arecords GROUP BY ip HAVING COUNT(ip)>1 )
;(在我的记录表中,有时一个IP上有多个主机。对于这些情况,我想得到hostname+ip)
我觉得子查询运行了很多次。如果我运行子查询,获取结果,并用这些结果替换子查询,它是快速的。我发现我可以通过使用视图来避免这种情况。
有一个查询的方法吗?
[我想要的结果的示例SQLfiddle:http://sqlfiddle.com/#!2/6c1bd/1/0 ]
发布于 2012-06-25 11:33:57
试试这个解决方案。这将多次检索表中存在的每个ip的所有行。这使用FROM中的一个子subselect,它只执行一次,而不是在WHERE中对每个外部行执行一次子查询。
在选择ips之后,您可以在相同的表上连接,其中ip等于在FROM子选择中选择的ip。连接应该是快速的,因为它将发生在索引上,最后的结果是,只有表中有多个值的hosts + ips才会得到:
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'发布于 2012-06-25 11:35:05
SELECT host,ip
FROM arecords ar
WHERE EXISTS
(SELECT *
FROM arecords ex
WHERE ex.ip = ar.ip
AND ex.host <> ar.host
)
;https://stackoverflow.com/questions/11188252
复制相似问题