Обнаружение дубликатов в двух столбцах MySQL (уникальные значения, разбросанные по столбцам)

0

У меня есть таблица 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       <--+

Мне не разрешено изменять что-либо в этой базе данных, поэтому мой вопрос заключается не в том, чтобы применять это в схеме, либо через триггеры или хранимые процедуры. Я не могу изменить схему базы данных, а скорее, как проверить, используя только операцию типа SELECT).

Если бы это был один столбец, я бы написал SELECT left FROM MyTable GROUP BY left HAVING COUNT(*) > 1; но для двух столбцов я не уверен, как действовать...

Теги:
duplicates

2 ответа

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;
0

если какие-либо значения слева находятся справа, то они дублируются, поэтому вы используете подзапрос и 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню