Member 11416690 Ответов: 2

Я должен найти дубликаты строк в одном столбце в oracle developer


У меня есть такой стол
идентификационное имя
1-е Иоанна сына
2 Джон Джон
3 Тесера Тереза

Я хочу такой результат
идентификационное имя
2 Джон Джон
3 Тесера Тесера
кто-нибудь может мне помочь

Что я уже пробовал:

 SELECT NAME, COUNT(NAME)
FROM TEST_V
GROUP BY NAME
HAVING COUNT(NAME) > 1

2 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что ваши имена не дублируются, а если и дублируются, то плохо хранятся.
Имя-это один столбец, поэтому для того, чтобы сравнить "две половины" для равенства, вам придется разделить его до и после пробела, а затем сравнить две части. Вы можете это сделать, но это действительно очень неэффективно - обработка строк не является сильной стороной Oracle.
Если вам нужно рассматривать эти два имени как отдельные, то сохраните их как отдельные имена (например, имя, фамилия) и сравните их.


Member 11416690

у нас нет никакого прямого запроса, чтобы узнать это

OriginalGriff

Нет. И обработка строк довольно плохая...

Рейтинг:
1

Kornfeld Eliyahu Peter

SQL глобально-и Oracle тоже очень плохо справляется со Строковой обработкой...
В вашем случае вы должны найти способ разделить имя вокруг пробелов, а затем сравнить, чтобы увидеть, есть ли повторяющиеся части...
(Учтите, что не все имена состоят только из двух частей - например, у меня их 3)
Код, который у вас есть, не имеет ничего общего с вашим требованием - если находит повторяющиеся значения в записях, а не внутри одного поля...
Итак, если вы не можете пропустить это требование - сделайте это в коде, а не в SQL (практически невозможно создать универсальный метод сравнения, когда вы это сделаете, вы обнаружите, что он очень плохо работает)...

-- РЕДАКТИРОВАТЬ
Вот некоторые SQL (не проверенные Oracle), которые могут разделить строку и создать таблицу, где каждая часть является строкой... Вы можете создать вызов функции на ее основе и проверить ее на наличие дубликатов с помощью стандартного SQL... Но будьте осторожны-у него очень плохая производительность...

DECLARE @NAME AS NVARCHAR(MAX) = 'jhon jhon terry perry'
DECLARE @NAME_PART TABLE 
(
	PART NVARCHAR(MAX)
)

DECLARE @CURVAL AS NVARCHAR(MAX)
DECLARE @ALLVALS AS NVARCHAR(MAX)

SET @ALLVALS = @NAME + ' '

WHILE LEN (@ALLVALS) > 0  
BEGIN 
	SET @CURVAL = LEFT(@ALLVALS, CHARINDEX(' ', @ALLVALS) - 1)

	INSERT INTO @NAME_PART SELECT @CURVAL

	SET @ALLVALS = RIGHT(@ALLVALS, LEN(@ALLVALS) - CHARINDEX(' ', @ALLVALS) + 1)
END

SELECT * FROM @NAME_PART


Member 11416690

Можете ли вы помочь мне в этом..можете ли вы сделать запрос для меня

Member 11416690

Thanq