Выбор дублирующих записей
Привет новичку на этом сайте, надеюсь, что кто-то сможет помочь мне с этим вопросом SQL.
Итак, у меня есть таблица под названием T_EE_EVALUATIONS, в которой есть повторяющиеся записи. Таблица имеет следующую структуру ниже. Мне нужно найти дубликат адреса, где house_id не совпадает с его дубликатом адреса. Ни один из идентификаторов не является P-ключами. Я попробовал это сделать, но на самом деле это работает не так, как я хочу.
Select E.eval_id , E.house_id , E.ClientCity, E.ClientAddr, E.Houseregion, T.eval_id , T.house_id, T.ClientCity , T.ClientAddr , T.Houseregion From T_EE_EVALUATIONS E INNER JOIN (Select eval_id , house_id,ClientCity, ClientAddr, Houseregion, COUNT(*) AS CountOf FROM T_EE_EVALUATIONS GROUP BY eval_id , house_id,ClientCity, ClientAddr, Houseregion-- HAVING COUNT(*)>1 ) T ON E.ClientCity || E.ClientAddr || E.Houseregion = T.ClientCity || T.ClientAddr || T.Houseregion
eval_id house_id ClientCity ClientAddr Houseregion ------------------------------------------------------------ 12345 56455 Quebec 34 Anyplace Quebec 12345 23765 Quebec 34 Anyplace Quebec 12345 94213 Quebec 34 Anyplace Quebec 13456 23456 Russell 214 mystreet Ontario 13456 33456 Russell 214 mystreet Ontario 14526 14567 Quispamsis 456 Thatstreet New Brunswick 14526 13567 Quispamsis 456 Thatstreet New Brunswick
Что я уже пробовал:
Select E.eval_id , E.house_id , E.ClientCity, E.ClientAddr, E.Houseregion, T.eval_id , T.house_id, T.ClientCity , T.ClientAddr , T.Houseregion From T_EE_EVALUATIONS E INNER JOIN (Select eval_id , house_id,ClientCity, ClientAddr, Houseregion, COUNT(*) AS CountOf FROM T_EE_EVALUATIONS GROUP BY eval_id , house_id,ClientCity, ClientAddr, Houseregion-- HAVING COUNT(*)>1 ) T ON E.ClientCity || E.ClientAddr || E.Houseregion = T.ClientCity || T.ClientAddr || T.Houseregion
ZurdoDev
Не группируйте по house_id, потому что это не является частью повторяющихся данных.
greatwhite1
Как включить house_id? Я должен иметь это, чтобы я мог видеть, если house_id отличается
ZurdoDev
Один из способов - использовать производную таблицу. Ваша производная таблица извлекает группы только по адресу, а затем присоединяется обратно к нему на основе полей адреса.
Если вы хотите удалить все, кроме одного для каждого дома, есть простые скрипты, которые вы можете найти в интернете, чтобы сделать это.
greatwhite1
Нет, как только я найду записи, я не буду их удалять, они должны обновить свой house_id до оригинала. Насколько я понимаю , прежде чем я начал здесь что-то заставило некоторые адреса получить новый идентификатор дома, дубликаты данных-это нормально, но все они должны иметь один и тот же идентификатор дома. Я знаю, что это странно, но я не строил его, просто должен жить с этим.
ZurdoDev
1. ответьте на комментарий так, чтобы я был уведомлен вместо того, чтобы публиковать новый комментарий.
2. Сделайте что-нибудь вроде этого
ВЫБИРАТЬ *
Из таблицы Т
ЛЕВОЕ СОЕДИНЕНИЕ
(
Выберите addr1, addr2, ...
из таблицы
Группировка по addr1, addr2, ...
Имея COUNT(*) > 1
) x на t.addr1 = x.addr1 и t.addr2 = x.addr2, ...
greatwhite1
Пробовал решения и пытался модифицировать их в соответствии с моими потребностями. Я начинаю думать, что то, что я пытаюсь сделать, может оказаться невозможным.
Мне нужен каждый адрес, который является дубликатом. и мне нужны именно eval_id и house_id. Как только я выделю их, я рассмотрю их, чтобы понять, почему они являются дубликатами. Текущие запросы не могут быть правильными, потому что возврат записей больше, чем это возможно.