sql—检测两个mysql列中的重复项(分散在列中的唯一值)

zsbz8rwp  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(308)

我有一个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       <--+

法律上不允许我修改数据库中的任何内容,因此我的问题不是在模式中强制执行此操作,或者通过触发器或存储过程我不能修改数据库的模式,而是如何使用just select type操作进行检查。
如果是一个专栏,我会写 SELECT left FROM MyTable GROUP BY left HAVING COUNT(*) > 1; 但是对于两个专栏我不知道如何继续。。。

ijxebb2r

ijxebb2r1#

如果left的任何值存在于right中,那么它是重复的,所以您可以使用子查询和 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号

tvokkenx

tvokkenx2#

使用 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;

相关问题