查询以查找不同字段中的重复项

时间:2015-06-10 13:49:31

标签: mysql

我搜索过,我找到的所有内容都是指记录中同一字段的重复内容。我使用的数据库存储计算机硬件,字段中包含ip地址的en0和en1。我需要找到两个字段中都存在重复ips的记录。为简单起见,这是一个示例表:

id  serial_no           en0           en1
 1    0000001  10.200.5.102  10.200.5.103
 2    0000002  10.200.6.102  10.200.6.103
 3    0000003  10.200.5.110  10.200.5.102

我需要查询返回记录1和/或3.获得任何重复是好的,最好是返回两者。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT DISTINCT id, serial_no, en0, en1
FROM mytable 
INNER JOIN (SELECT ip
            FROM (
               SELECT id, serial_no, en0 AS ip
               FROM mytable

               UNION 

               SELECT id, serial_no, en1 AS ip
               FROM mytable ) t
            GROUP BY ip
            HAVING COUNT(*) > 1) t
ON t.ip = en0 OR t.ip = en1

以上内容将返回包含重复IP的所有记录。

Fiddle Demo here

以下子查询:

SELECT ip
FROM (
  SELECT id, serial_no, en0 AS ip
  FROM mytable

  UNION 

  SELECT id, serial_no, en1 AS ip
  FROM mytable ) t
GROUP BY ip
HAVING COUNT(*) > 1;

用于返回重复的IP。请注意使用UNION代替UNION ALL。这样,在相同记录的en0en1列中重复的IP将不会被视为重复。如果您想要不同的行为,请更改为UNION ALL