我需要查询一些DB,查找一列中有重复项的行。
例如,表servers
:
---------------------
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地址)。
'纸币'和'安妮'不会回来,因为他们有独特的IP
答案 0 :(得分:2)
您可以使用子查询来获取包含多个ip
的{{1}}个name
,并将结果放入IN
子句中:
SELECT *
FROM servers
WHERE ip IN ( SELECT ip
FROM servers
GROUP BY ip
HAVING COUNT(*) > 1)
或者您可以使用JOIN
,逻辑是相同的:
SELECT t1.*
FROM servers t1 JOIN (
SELECT ip
FROM servers
GROUP BY ip
HAVING COUNT(*) > 1
) t2 ON t1.ip = t2.ip
答案 1 :(得分:1)
SELECT DISTINCT x.*
FROM my_table x
JOIN my_table y
ON y.name <> x.name
AND y.ip = x.ip;