У меня есть таблица с двумя столбцами NVARCHAR: источник и цель.Как найти частичные дубликаты?
Я хочу найти строки, для которых вы можете найти другую строку с тем же источником и целью, содержащей текущий.
В приведенном ниже примере, я хочу найти строки 1 и 7:
- Строка 1 "частичный дубликат" из строки 3
- Строка 7 представляет собой "частичное дубликат" из строки 6
Вот фрагмент кода SQL:
CREATE TABLE #YourTable (ID int, [source] nvarCHAR(12), [target] nvarCHAR(12))
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (1,'wordA','word1')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (2,'wordA','word2')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (3,'wordA','word3 ; word1')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (4,'wordB','word4')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (5,'wordC','word5')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (6,'wordD','word6 ; word7')
INSERT INTO #YourTable ([ID],[source],[target]) VALUES (7,'wordD','word7')
SELECT
[source],
STUFF((
SELECT ', ' + [target]
FROM #YourTable
WHERE ([source] = Results.[source])
FOR XML PATH (''))
,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY [source]
HAVING COUNT(1)>1
DROP TABLE #YourTable
Моя первая идея была конкатенации, но это не приближает меня к решению ...
Я могу экспортировать свои данные в CSV и работать с языком программирования (python, C#, ...), чтобы изолировать идентификаторы, но мне любопытно чтобы увидеть, как это можно сделать в SQL.
Конечной целью является удаление «частичных дубликатов».
Я изменил 'и t2.target как t1.target || 'target' + '%' или t2. [target] как t1. [target] + '%' или t2. [target] like '%' + t1. [target]) '. –
'и (t2. [Target] как '%' + t1. [Target] + '%'' будет достаточным, так как ''% ''соответствует пустой строке (что является причиной наличия' и t2.target <> t1.target' внутри предложения 'where') – collapsar