我搜索过,我找到的所有内容都是指记录中同一字段的重复内容。我使用的数据库存储计算机硬件,字段中包含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.获得任何重复是好的,最好是返回两者。
由于
答案 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的所有记录。
以下子查询:
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
。这样,在相同记录的en0
,en1
列中重复的IP将不会被视为重复。如果您想要不同的行为,请更改为UNION ALL
。