Итак, я хочу сделать что-то вроде этого кода sql ниже:
select s.id, s.name,s.city
from stuff s
group by s.name having count(where city and name are identical) > 1
Чтобы получить следующее (но не обращайте внимания на то, где совпадают только имя или только город, оно должно быть в обоих столбцах):
id name city
904834 jim London
904835 jim London
90145 Fred Paris
90132 Fred Paris
90133 Fred Paris
sql
sql-server
sql-server-2008
duplicates
НимЧимпский
источник
источник
name
илиcity
содержатnull
, то они не будут отражены во внешнем запросе, но будут сопоставлены во внутреннем запросе.null
то (если я чего-то не упустил), вам нужно изменить его наCROSS JOIN
(полное декартово произведение), а затем добавитьWHERE
предложение, например:WHERE ((s.name = t.name) OR (s.name is null and t.name is null)) AND ((s.city = t.city) OR (s.city is null and t.city is null))
источник
Что-то вроде этого поможет. Не знаю о производительности, поэтому сделайте несколько тестов.
источник
Использование
count(*) over(partition by...)
предоставляет простые и эффективные средства для обнаружения нежелательного повторения, а также перечисляет все затронутые строки и все требуемые столбцы:В то время как самые последние версии СУБД поддерживают
count(*) over(partition by...)
MySQL V 8.0, введены "оконные функции", как показано ниже (в MySQL 8.0)db <> скрипка здесь
источник
Немного поздно к игре в этом посте, но я нашел этот способ довольно гибким / эффективным
источник
Вы должны самостоятельно присоединиться к материалам и сопоставить имя и город. Затем сгруппируйте по счету.
источник
Учитывая промежуточную таблицу с 70 столбцами и только 4, представляющими дубликаты, этот код вернет неправильные столбцы:
.
источник