MYSQL从列匹配的表中选择

时间:2015-01-19 23:32:24

标签: mysql sql

我需要查询一些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

2 个答案:

答案 0 :(得分:2)

您可以使用子查询来获取包含多个ip的{​​{1}}个name,并将结果放入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

答案 1 :(得分:1)

SELECT DISTINCT x.* 
           FROM my_table x 
           JOIN my_table y 
             ON y.name <> x.name 
            AND y.ip = x.ip;