Над разделом найти дубликаты и удалить их на основе критериев SQL - PullRequest
0 голосов
/ 05 декабря 2018

Надеюсь, у всех все хорошо.У меня есть дилемма, которую я не могу понять.Я пытаюсь найти уникальное значение для поля, которое не является дубликатом.

Например:

Таблица 1

|Col1  | Col2| Col3 |     
| 123  |  A  |  1   |     
| 123  |  A  |  2   |     
|  12  |  B  |  1   |     
|  12  |  B  |  2   |     
|  12  |  C  |  3   |     
|  12  |  D  |  4   |     
|  1   |  A  |  1   |     
|  2   |  D  |  1   |      
|  3   |  D  |  1   |  

Столбец 1 - это поле, которое будет иметь повторяющиеся значения.Col2 будет владельцем значения в Col 1. Col 3 использует номер строки () с синтаксисом Over Partition для получения чисел в порядке возрастания.

Цель, которую я пытаюсь достичь, состоит в том, чтобы удалить значение в столбце 1, если оно не является действительно уникальным, если смотреть на столбец col2.

Пример:

Col1 имеет значение 123, Col2 имеет значение A. Несмотря на то, что A принадлежит два экземпляра 123, я могу определить, что он действительно уникален.

Теперь посмотрите на Col1 со значением 12 со значениями в Col2 B, C, D.

Значение 12 связано с тремя разными владельцами, что исключает 12 из нашего списка результатов.

Итак, в конце я хотел бы увидеть таблицу результатов, такую ​​как эта:

|Col1  | Col2| 
| 123  |  A  | 
|  1   |  A  |
|  2   |  D  | 
|  3   |  D  |

Подводя итог, я хотел бы сначала использовать номера разделов, чтобы определить, является ли значение в col1повторяетсяОттуда я хочу убедиться, что значения в столбце 2 одинаковы.Если это так, значение в столбцах 1 и 2 остается одной записью.Однако если значения в столбце 2 не совпадают, все записи для значения столбца col1 удаляются.

Я предоставлю синтаксический код для моего запроса, если это необходимо.

Обновление **

Я не упомянул, что таблица 1 является результатом внутреннего объединения двух таблиц.

Таким образом, Col1 происходит из таблицы a, а Col2 - из таблицы b.

Значения в таблице a для col2 трудно интерпретировать, поэтому мне пришлось разобраться в них и присвоить им правильные значения имен.

Запрос на объединение, который я использовал для объединения двух:

Select a.Col1, B.Col2 FROM Table a INNER JOIN Table b on a.Colx = b.Colx

Обновление **

Таблица a:

|Col1  | Colx| Col3 |     
| 123  | SMS |  1   |     
| 123  | S9W |  2   |     
|  12  | NAV |  1   |     
|  12  | NFR |  2   |     
|  12  | ABC |  3   |     
|  12  | DEF |  4   |     
|  1   | SMS |  1   |     
|  2   | DEF |  1   |      
|  3   | DES |  1   |  

Таблица b:

|Colx  | Col2| 
| SMS  |  A  | 
| S9W  |  A  |
| DEF  |  D  | 
| DES  |  D  |
| NAV  |  B  |
| NFR  |  B  |
| ABC  |  C  |

Выше приведены примеры данных для обеих таблиц, которые объединяются для создания первой таблицы, отображаемой в этом теле.

Спасибо всем большое!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018
Оператор

NOT EXISTS может использоваться для выполнения этой задачи:

SELECT distinct Col1 ,  Col2
FROM table t
WHERE NOT EXISTS(
  SELECT 1 FROM table t1
  WHERE t.col1=t1.col1 AND t.col2 <> t1.col2
)
0 голосов
/ 05 декабря 2018

Если я правильно понимаю, вы хотите:

select col1, min(col2)
from t
group by col1
where min(col2) <> max(col2);

Я думаю, что третий столбец сбивает вас с толку.Кажется, он не играет никакой роли в той логике, которую вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...