检测两个MySQL列中的重复项(分布在各列中的唯一值)

时间:2018-07-30 08:40:54

标签: mysql sql duplicates

我有一个MySQL表,其中包含分布在两列中的标识符:

left right
1    2
3    6
4    5

使用SQL如何找出表中是否包含重复的标识符?

例如,上面的示例可以,但是下面的示例则不能:

left right
1    2       <--+
3    6          | Not OK
4    1       <--+

left right
1    2
3    3       <-- Not OK
4    5

left right
1    2
3    6       <--+ Not OK
4    6       <--+

法律上不允许我修改该数据库中的任何内容,因此我的问题不是关于模式中的enforcing或通过触发器或存储过程,我不能修改数据库的模式,而是如何使用只是SELECT类型的操作。

如果是单列,我会写SELECT left FROM MyTable GROUP BY left HAVING COUNT(*) > 1;,但是对于两列,我不确定如何继续...

2 个答案:

答案 0 :(得分:1)

使用UNION ALL在一列中获取左右所有值:

select value
from 
(
  select left as value from mytable 
  union all
  select right as value from mytable 
) all_values
group by value
having count(*) > 1;

答案 1 :(得分:0)

如果right中存在left的任何值,则它是重复的,因此您可以使用子查询和aggregate函数

select case when count(*)>0 then 'deplicate' else 'not' end as result  from your_table
    where left  in (select distinct right from your_table t2)

http://sqlfiddle.com/#!9/ce69b8/2