выборка дубликатов кортежей в Oracle с использованием SQL - PullRequest
0 голосов
/ 26 мая 2018

Вот две структуры таблиц Table 1Table 2

У меня есть две таблицы, в которых я пытаюсь получить дубликаты записей на основе некоторых условийкак where a.fname=b.fname and a.phone_no<>b.phone_no

Но мне также нужно включить другой столбец 'адрес', который находится в таблице 2, и ввести такое же условие для дублированной проверки адреса.

SELECT 
 "Fname"||' '||"Lname" AS "Customer_Name",
  COUNT(*) AS "Countof" 
FROM "S_CONTACT" A 
WHERE EXISTS (
  SELECT 1 
  FROM "S_CONTACT" B 
  WHERE A."PHONE" != B."PHONE" 
    AND A."Fname" = B."Fname" 
    AND A."EMAIL"=B."EMAIL" 
    AND A."Lname"=B."Lname" 
    AND "DOB" IS NULL
) 
GROUP BY "Fname","Lname","EMAIL" 
HAVING count(*) >1; 

Вышеsql дает мне список клиентов с повторяющимися именами и адресом электронной почты.
Но я не знаю, как ввести в этот sql адрес столбца из другой таблицы t2

1 Ответ

0 голосов
/ 26 мая 2018

Если вы пытаетесь найти дубликаты в одной таблице:

select c.fname, c.lname, c.email
from contacts c
group by c.fname, c.lname, c.email
having min(c.phone) <> max(c.phone);

Если вы хотите сосчитать null как другое значение, используйте:

having min(c.phone) <> max(c.phone) or count(c.phone) <> count(*)

Вы можетепроделайте то же самое со второй таблицей:

select c.fname, c.lname, c.email
from second_table c
group by c.fname, c.lname, c.email
having min(c.address) <> max(c.address) or count(c.address) <> count(*)

Если вам нужны результаты в одном наборе результатов, используйте union или union all или какой-либо аналогичный механизм.

...