我有一个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;
,但是对于两列,我不确定如何继续...
答案 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)