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

标签 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;但对于两列,我不知道如何继续......

最佳答案

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

关于mysql - 检测两个 MySQL 列中的重复项(分散在列中的唯一值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590046/

相关文章:

mysql - 如何在 2 列而不是 1 列中查找重复项

javascript - 根据两个条件(重复的 mac 地址和使用条件小于或大于)从 JavaScript 中的对象数组中删除对象

mysql - 从多个候选键中选择

sql - 是否有 SQL 表约束来确保两列之间存在关系?

mysql - sql: LIKE %...% 和 LIKE 有什么区别?

MySql 查询为折线图按日期分组的同一列返回不同的别名

function - 我需要编写一个haskell 函数来复制字符串中出现的每个字符,两者都是由用户给出的。

mysql - 更新多个数据库的存储过程

mysql - 在这种情况下有没有办法避免多重嵌套选择?

mysql - 导入数据库时​​遇到问题