代码之家  ›  专栏  ›  技术社区  ›  Nicolas Raoul

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

  •  0
  • Nicolas Raoul  · 技术社区  · 6 年前

    我有一个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 这在schema或via触发器或存储过程中我不能修改数据库的schema,而是如何使用SELECT type操作进行检查。

    如果是一个专栏我会写 SELECT left FROM MyTable GROUP BY left HAVING COUNT(*) > 1; 但对于两个专栏我不知道如何继续。。。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Thorsten Kettner    6 年前

    使用 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;
    
        2
  •  0
  •   Zaynul Abadin Tuhin    6 年前

    如果左边有任何值,那么它是重复的,所以你使用子查询和 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