我需要在一些数据库中查询一列中有重复的行。
例如,表服务器
:
---------------------
name | ip
---------------------
| bob | 10.1.2.3 |
| larry | 10.1.2.3 |
| sam | 10.9.9.9 |
| george | 10.9.9.9 |
| bill | 10.6.6.6 |
| anne | 10.7.7.7 |
我需要我的查询来提取 bob、larry、sam、george 的行,因为它们在第二列(在本例中为 IP 地址)中有匹配项/重复项。
'bill' 和 'anne' 不会返回,因为他们有唯一的 IP
最佳答案
您可以使用子查询获取带有多个附加 name
的 ip
并将结果放在 IN
子句中:
SELECT *
FROM servers
WHERE ip IN ( SELECT ip
FROM servers
GROUP BY ip
HAVING COUNT(*) > 1)
SQLFiddle
或者你可以使用JOIN
,逻辑是一样的:
SELECT t1.*
FROM servers t1 JOIN (
SELECT ip
FROM servers
GROUP BY ip
HAVING COUNT(*) > 1
) t2 ON t1.ip = t2.ip
SQLFiddle
关于MYSQL 从列匹配的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28035352/