Как удалить дубликаты строк SQL через сравнение двух одинаковых таблиц - PullRequest
0 голосов
/ 13 декабря 2018

Как удалить дубликаты значений a = b и b = a?

with a as(select w.id , w.doc, w.org 
, d.name_s, d.name_f, d.name_p, d.spec      
, o.name, o.extid    
from crm_s_workplaces w    
join crm_s_docs d on d.id=w.doc    
join crm_s_orgs o on o.id=w.org    
where d.active=1 and d.cst='NY' and w.active=1 and w.cst='NY' and o.active=1 
and    
o.cst='NY')     
select a1.doc, a2.doc,    
a1.org,a1.name_s,a1.name_f,a1.name_p,a2.name_s,a2.name_f,a2.name_p from a a1    
join a a2 on     
a1.name_s=a2.name_s and    
substr(a1.name_f,1,1)=substr(a2.name_f,1,1) and    
substr(a1.name_p,1,1)=substr(a2.name_p,1,1) and     
a1.org=a2.org and    
a1.spec<>a2.spec    
order by a1.name_s    `enter code here`

Диаграмма модели ER:

ermodel-diagram

Повторите пример:

repeat example

Иногда попадаются a1.spec > a2.spec:

imagea2.spec">

1 Ответ

0 голосов
/ 13 декабря 2018

То, что вы называете «дубликатами», на самом деле не является дубликатами в вашей базе данных.

У вас в основном есть несколько записей документов для того, кем может быть один и тот же человек.Видите, что даже их имена не всегда совпадают.Для instace

doc_id 1131385 имеет NAME_F = "Gabr", а doc_id 1447530 имеет NAME_F = "Gabor"

В вашей базе данных это две разные сущности, и вы не можете сопоставить их с помощью первичного ключа.Вы можете попытаться объединить имя, отчество и фамилию, но, как вы можете видеть в приведенном выше примере с Gabor / Gabr, даже это не сработает.

Можете ли вы изменить схему БД?Если это так, вам нужно разделить документы в одной таблице - 1 запись на врача.И иметь специализацию в отдельной таблице со следующими столбцами:

spec_id (int, PK) doc_id (внешний ключ к таблице Doc) специализация

таким образом, если у вас 1 врач с 3спецификации, он / она будет отображаться только один раз в таблице документов и несколько раз в таблице спецификаций.

Я просто заметил кое-что еще.У вас есть поле спецификации на рабочем месте в таблице.Зачем?Если вы хотели сказать, что Док Габор работает администратором в больнице 1, но как терапевт в больнице 2, вы можете сделать это.Однако вы должны удалить поле спецификации из таблицы документов и использовать только спецификацию в таблице рабочих мест.

...